尝试使用 get_sites() 并在 wordpress 中制作简码

Trying to use get_sites() and make a shortcode in 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');

你做错了几件不同的事。你不应该回显简码输出,你应该 return 它。此外,您没有以正确的方式访问对象属性。试试下面的代码:

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');