Intereting Posts
Как создать способ для пользователей назначать категории для почты из внешнего интерфейса? Плагины WordPress поддерживают многоуровневый сайт? Связанные записи автора страницы, не работающие на месте производства Определить постоянные ссылки для настраиваемого типа сообщений по таксономии в WP 3.4 Элементы панели навигации администратора, перекрывающиеся в панели администратора Управление пользовательским столбцом добавить класс "num" Пользовательский термин таксономии в продукте WooCommerce permalink Архивировать-Custom-Post-Type заказ по дате события, ASC и скрыть события, которые завершили Как получить последовательность запуска крюка WordPress? Добавить Stack Exchange Последние вопросы на боковой панели wordpress? Как вы можете переопределить проверку is_multisite в wp-login.php для индивидуального входа / регистрации? Отфильтровать содержимое из сообщения в глобальном масштабе сразу после того, как он получен из базы данных Локальный домен с помощью прокси-сервера: Infinite 301 redirect, неправильная URL-адрес Заказывать сообщения типа персонализированного сообщения по дате события с помощью плагина FT Calendar Сообщения против страниц и категорий

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

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

Я рассмотрел другие связанные вопросы и ответы на 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;