Шорткод, создаваемый этой функцией — список всех сайтов в мультисайте — выводит над контентом в цикле, независимо от того, где он находится в редакторе.
Я посмотрел на другие связанные вопросы и ответы по WPSE и понял, что это связано с функцией, использующей echo
вместо return
, но это не так просто, как замена экземпляров echo
на return
в функции ниже. Или добавив echo=0
с помощью функции WP, такой как wp_list_pages()
Есть идеи?
// Вывести один пункт меню
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) != '/') {
$url .= '/';
}
echo '<a href="' . $url . '">' . $title . '</a>';
if ($id == $blog_id) {
echo '</strong>';
}
echo '</li>';
}
}
// Вывести все меню
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>';
}
// Создать шорткод [bloglist]
function bloglist_shortcode($atts)
{
projects_menu(false);
}
add_shortcode('bloglist', 'bloglist_shortcode');
Вам нужно создать строку и вернуть ее.
Сделайте это для обеих функций.
All functions have to return a string, you should not use
echo
anywhere. Rewrite the functions, use an internal variable to handle the strings and return that:Все функции должны возвращать строку командой return . Вы не должны нигде использовать
echo
. Перепишите функции, используйте внутреннюю переменную для обработки строк и верните следующее: p>