如何在一个页面上列出所有网站

时间:2012-02-09 作者:Demilio

我可以在一个页面上列出我网络中的所有博客吗?

4 个回复
最合适的回答,由SO网友:bueltge 整理而成

是的,模板的小来源。

<ul class=\'postlist no-mp\'>

<?php 
/**
 * Old version, change on 07/23/2013
 *
$blogs = $wpdb->get_results( 
    "SELECT blog_id,path FROM {$wpdb->blogs} 
    WHERE blog_id != {$wpdb->blogid} 
    AND site_id = \'{$wpdb->siteid}\' 
    AND spam = \'0\' 
    AND deleted = \'0\' 
    AND archived = \'0\' 
    order by blog_id", ARRAY_A
); 
 */

// get all blogs
$blogs = get_blog_list( 0, \'all\' );

if ( 0 < count( $blogs ) ) :
    foreach( $blogs as $blog ) : 
        switch_to_blog( $blog[ \'blog_id\' ] );

        if ( get_theme_mod( \'show_in_home\', \'on\' ) !== \'on\' ) {
            continue;
        }

        $description  = get_bloginfo( \'description\' );
        $blog_details = get_blog_details( $blog[ \'blog_id\' ] );
        ?>
        <li class="no-mp">

            <h2 class="no-mp blog_title">
                <a href="<?php echo $blog_details->path ?>">
                    <?php echo  $blog_details->blogname; ?>
                </a>
            </h2>

            <div class="blog_description">
                <?php echo $description; ?>
            </div>

            <?php 
            query_posts( \'showposts=5\' );
            if ( have_posts() ) :
                while( have_posts() ) :
                    the_post();
                    ?>
                    <div class="blog_post">
                        <div class="post_title">
                            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        </div>
                        <div class="post_excerpt">
                            <?php the_excerpt(); ?>
                        </div>
                    </div>
                <?php endwhile; ?>
            <?php endif; 
            restore_current_blog();
            ?>
        </li>
<?php endforeach;
endif; ?>
</ul>

SO网友:Tom J Nowell

这将打印出多站点网络中所有公共站点的无序列表:

// $bcount = get_blog_count();
global $wpdb;
$blogs = $wpdb->get_results("SELECT * FROM $wpdb->blogs WHERE spam = \'0\' AND deleted = \'0\' and archived = \'0\' and public=\'1\'");
if(!empty($blogs)){
    ?><ul class="menu"><?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 class="menu-item<?php if($counter == get_current_blog_id()){ echo \' current-menu-item\';}?>">
                    <a href="<?php echo $addr; ?>"><?php echo $name;?></a>
                </li>
                <?php
            }
        }
    }
    ?></ul><?php
}

SO网友:trejder

这是一个基于Tom J Nowell的想法和答案编写的解决方案。它将Wordpress Multisite安装中所有站点的排序列表打印为简单的行(用管道分隔)。

要运行此解决方案,请编辑当前选定的主题并选择shortcodes.php 从右侧边栏。在该文件末尾附近,首次出现之前add_shortcode 调用添加以下函数:

function theme_list_all_network_sites()
{
    global $wpdb;

    $result = \'\';
    $sites = array();
    $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))
    {
        foreach($blogs as $blog)
        {
            $details = get_blog_details($blog->blog_id);

            if($details != false)
            {
                $url = $details->siteurl;
                $name = $details->blogname;

                if(!(($blog->blog_id == 1) && ($show_main != 1)))
                {
                    $sites[$name] = $url;
                }
            }
        }

        ksort($sites);

        $count = count($sites);
        $current = 1;

        foreach($sites as $name=>$url)
        {
            $result.= \'<a href="\'.$url.\'">\'.$name.\'</a>\';
            $result.= ($current == $count) ? "\\n" : \' | \';

            ++$current;
        }
    }

    return $result;
}
然后向下滚动到文件末尾,最后出现add_shortcode 添加:

add_shortcode(\'network_list\', \'theme_list_all_network_sites\');
点击Update File 保存更改。

现在,每当有人使用[network_list] 在帖子、页面或主题元素中,将打印一个网站列表来代替该短代码。

SO网友:Maxime Culea

自WordPress 4.6.0以来,我为您提供了一种更现代的“列出”(或更多)方式:

<?php $sites_q = new \\WP_Site_Query( [
    \'site__not_in\' => get_main_site_for_network(),
] );
$sites_for_network = $sites_q->get_sites();
if ( ! empty( $sites_for_network ) ) {
    $original_site_id = get_current_blog_id();
    foreach ( $sites_for_network as $site ) {
         /** @var $site \\WP_Site */
         switch_to_blog( $site->blog_id );
         // Do stuff with the site
    }
    switch_to_blog( $original_site_id );
}

结束

相关推荐

wp_list_pages by taxonomy?

我需要帮助为wp\\u list\\u类别创建一个助行器,该助行器可以过滤分类法,并在末尾元素中实际列出页面。我完全不知道该怎么办。我已经成功地为wp\\u list\\u pages函数实现了一个Walker,但这显然不适用于这种情况,因为我的wp\\u list\\u pages Walker依赖于子-父关系此外,我希望能够指定要返回的条款。基本上,我需要一个按分类法和术语筛选的列表。