如何从多站点的所有列表中排除指定

时间:2020-04-28 作者:Jornes

我有个问题。我想知道,如何从网络多站点中排除指定站点?

这是我用来调用多站点网络中站点的所有链接的代码。

<?php $bcount = get_blog_count(); global $wpdb; $blogs = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE spam = \'0\' AND deleted = \'0\' and archived = \'0\' and public=\'1\'")); if(!empty($blogs)) { ?>
<?php foreach($blogs as $blog) {
$details = get_blog_details($blog->blog_id);
if($details != false) {
$addr = $details->siteurl;
$name = $details->blogname;
if(!(($blog->blog_id == 1)&&($show_main != 1))) { ?>
  <li><a href="<?php echo $addr; ?>"><?php echo $name;?></a></li>
       <?php } } } ?><?php } ?>
我希望将来排除1或2个指定站点。非常感谢。

*是否可以向现有代码中添加一个简单的代码以使其正常工作?

1 个回复
最合适的回答,由SO网友:Pat J 整理而成

我建议使用get_sites() 而不是手工制作$wpdb 电话。

将此代码添加到主题functions.php 文件

function wpse365255_print_sites() {
    $args = array(
        \'number\' => 10000, // if you\'ve got more than 10,000 sites, 
                           //you can increase this
        \'public\'        => 1,
        \'spam\'          => 0,
        \'deleted\'       => 0,
        \'archived\'      => 0,
        \'site__not_in\'  => array( 1, 2 ), 
        // this will exclude sites with ID 1 and 2
    );
    $sites = get_sites( $args ); // will return an array of WP_Site objects 
    $list = \'\';
    foreach ( $sites as $site ) {
        $details = get_blog_details( $site->blog_id );
        if ( ! empty( $details ) ) {
            $list .= \'<li>\';
            $list .= \'<a href="\' . $details->siteurl . \'">\';
            $list .= $details->blogname;
            $list .= \'</a>\';
            $list .= \'</li>\';
        }
    }
    if ( ! empty( $list ) ) {
        echo \'<ul>\' . $list . \'</ul>\';
    }
}
然后,在你的footer.php 文件中,将最初发布的代码替换为:

<?php
    wpse365255_print_sites();
?>
通常最好不要在模板文件中定义函数,而是将它们放在functions.php 并从模板文件中调用它们,这就是所要做的。(最好还是把它们挂到动作或过滤器挂钩上,但那是a lesson for another day.)

参考文献get_sites()
  • WP_Site class
  • 相关推荐

    MultiSite有SSL证书,但媒体库仍为http://

    我们的多站点WordPress安装的URL为https://xx.com 对于主域,例如,https://yy.xx.com 作为子网站。我们正在使用WP的内置域映射功能。媒体库链接仍显示为http://xx 尽管如此,子域上使用的任何图像都被标记为不安全。只有一个子域(我们最近的一个子域)具有与结构的媒体库链接https://zz.xx.com. SSL证书可能是在创建其他子域之后安装的,但在ZZ之前:我不确定。我如何获得WP媒体库链接,所有链接都显示为https://-最好是URL中的子域?理想情况下