Попытка использовать get_sites() и сделать шорткод в wordpress

Я пытаюсь создать шорткод, который создает список всех моих сайтов в моей многосайтовой сети Wordpress. Идея заключается в том, что я использую [list_sites] в теле страницы и получаю список всех своих сайтов.

Я использую get_sites, потому что у меня версия 4.8.3.

Когда я добавляю эту функцию в файл functions.php моей родительской темы, я получаю внутреннюю ошибку 500.

Я попытался использовать плагин под названием Code Snippets, чтобы добавить этот код, но я получаю эту ошибку, которая дает подсказку:

Фрагмент деактивирован из-за ошибки в строке 11: синтаксическая ошибка, непредвиденный '['

Кажется, что каждый пример кода, который я видел в Интернете, использует один и тот же синтаксис, поэтому я не уверен, что делаю неправильно.

Вот мой код:

function make_list_shortcode() {

$subsites = get_sites();

if ( ! empty ( $subsites ) ) {

    echo '<ul class="subsites">';

    foreach( $subsites as $subsite ) {

        $subsite_id = get_object_vars( $subsite )["blog_id"];
        $subsite_name = get_blog_details( $subsite_id )->blogname;
        $subsite_link = get_blog_details( $subsite_id )->siteurl;
        echo '<li class="site-' . $subsite_id . '"><a href="' . $subsite_link . '">' . $subsite_name . '</a></li>';

    }

    echo '</ul>';

}

}
add_shortcode('list_sites', 'make_list_shortcode');

person kingsman    schedule 31.10.2017    source источник


Ответы (1)


Вы делаете несколько разных вещей неправильно. Вы не должны отображать вывод шорткода, вы должны вернуть его. Кроме того, вы неправильно обращаетесь к своим свойствам объекта. Попробуйте следующий код:

function make_list_shortcode() {

    $subsites = get_sites();

    if ( ! empty ( $subsites ) ) {

        $html = '<ul class="subsites">';

        foreach( $subsites as $subsite ) {

            $subsite_id = $subsite->blog_id;
            $subsite_name = get_blog_details( $subsite_id )->blogname;
            $subsite_link = get_blog_details( $subsite_id )->siteurl;
            $html .= '<li class="site-' . $subsite_id . '"><a href="' . $subsite_link . '">' . $subsite_name . '</a></li>';

        }

        $html .= '</ul>';
        return $html;

    }

}
add_shortcode('list_sites', 'make_list_shortcode');
person Spartacus    schedule 31.10.2017
comment
Спасибо, Спартак, теперь все работает отлично. Как мне расположить список по алфавиту? Я думал о sort($subsite_name), но не думаю, что это сработает, поскольку это свойство, а не массив. - person kingsman; 31.10.2017
comment
Прочтите developer.wordpress.org/reference/functions/get_sites... Вы можете передать аргумент для порядка сортировки - person Spartacus; 31.10.2017