Intereting Posts

Вывод коротких кодов в верхней части страницы

Штрих-код, созданный этой функцией – список всех сайтов в многопользовательском режиме – выводит выше содержимого в цикле, независимо от того, где он помещается в редакторе.

Я рассмотрел другие связанные вопросы и ответы на WPSE и понял, что это связано с функцией, использующей echo вместо return , но это не так просто, как замена экземпляров echo на return в приведенной ниже функции. Или добавление echo=0 с функцией WP, например wp_list_pages()

Есть идеи? Где функция, которую нужно вернуть вместо эхо-сигнала?

 // Output a single menu item function projects_menu_entry($id, $title, $link_self) { global $blog_id; if ($link_self || $id != $blog_id) { echo '<li>'; if ($id == $blog_id) { echo '<strong>'; } $url = get_home_url($id); if (substr($url, -1) != '/') { // Note: I added a "/" to the end of the URL because WordPress // wasn't doing that automatically in v3.0.4 $url .= '/'; } echo '<a href="' . $url . '">' . $title . '</a>'; if ($id == $blog_id) { echo '</strong>'; } echo '</li>'; } } // Output the whole menu // If $link_self is false, skip the current site - used to display the menu on the homepage function projects_menu($link_self = true) { global $wpdb; echo '<ul>'; projects_menu_entry(1, 'Home', $link_self); $blogs = $wpdb->get_results(" SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' AND blog_id != 1 "); $sites = array(); foreach ($blogs as $blog) { $sites[$blog->blog_id] = get_blog_option($blog->blog_id, 'blogname'); } natsort($sites); foreach ($sites as $blog_id => $blog_title) { projects_menu_entry($blog_id, $blog_title, $link_self); } echo '</ul>'; } // Adds a [bloglist] shortcode function bloglist_shortcode($atts) { projects_menu(false); } add_shortcode('bloglist', 'bloglist_shortcode'); 

Solutions Collecting From Web of "Вывод коротких кодов в верхней части страницы"

Все функции должны возвращать строку, вы не должны использовать echo любом месте. Перепишите функции, используйте внутреннюю переменную для обработки строк и верните ее:

 // Output a single menu item function projects_menu_entry($id, $title, $link_self) { global $blog_id; $out = ''; if ($link_self || $id != $blog_id) { $out .= '<li>'; if ($id == $blog_id) { $out .= '<strong>'; } $url = get_home_url( $id, '/' ); $out .= '<a href="' . $url . '">' . $title . '</a>'; if ($id == $blog_id) { $out .= '</strong>'; } $out .= '</li>'; } return $out; } // Output the whole menu // If $link_self is false, skip the current site - used to display the menu on the homepage function projects_menu($link_self = true) { global $wpdb; $out = '<ul>'; $out .= projects_menu_entry(1, 'Home', $link_self); $blogs = $wpdb->get_results(" SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' AND blog_id != 1 "); $sites = array(); foreach ($blogs as $blog) { $sites[$blog->blog_id] = get_blog_option($blog->blog_id, 'blogname'); } natsort($sites); foreach ($sites as $blog_id => $blog_title) { $out .= projects_menu_entry($blog_id, $blog_title, $link_self); } $out .= '</ul>'; return $out; } // Adds a [bloglist] shortcode function bloglist_shortcode($atts) { return projects_menu(false); } add_shortcode('bloglist', 'bloglist_shortcode'); 

Для аналогичного расширенного примера см.: Как вернуть содержимое цикла .

Вы не можете заменить экземпляры echo потому что вы можете вернуться только один раз. Вам нужно построить строку и вернуть ее.

 function projects_menu_entry($id, $title, $link_self) { global $blog_id; $ret = ''; if ($link_self || $id != $blog_id) { $ret .= '<li>'; if ($id == $blog_id) { $ret .= '<strong>'; } // and so on $ret .= '</ul>'; return $ret; } 

Сделайте это для обеих функций, и я ожидаю, что это сработает. Извиняюсь, если я плохо что-то неправильно понял.

Есть идеи? Где функция, которую нужно вернуть вместо эхо-сигнала?

Я собираюсь предложить альтернативное решение, которое не требует замены экземпляров эха или сборки строки возврата.

Вы можете включить буферизацию вывода и вернуть буфер в виде строки.

Добавьте ob_start() в начало функции перед любым эхо-вызовом.

в конце функции добавьте:

 $response = ob_get_contents(); ob_end_clean(); return $response;