【问题标题】:How to get list of all sites in Wordpress Multisite Network?如何获取 Wordpress 多站点网络中所有站点的列表?
【发布时间】:2015-12-07 20:56:44
【问题描述】:

我需要一些 php 请求来获取 wp-network 中所有站点的列表。有可能吗?

【问题讨论】:

  • 展示你所做的一些研究。如果你不表现出帮助自己的意愿,人们就不会愿意帮助你。
  • 这是一种代码,无法通过逻辑访问。顺便说一句,我没有考虑过codex。我真的很感谢 Firefox 的回答,因为即使现在我也明白我不会在 codex 中找到它。

标签: wordpress


【解决方案1】:

从 WP 4.6 开始,有一个新的 function to query sitesget_sites($query_arg) 与用于检索帖子的熟悉的 get_posts($query_args) 平行,

$blogs = get_sites();
foreach( $blogs as $b ){
    $b->blog_id 
    //Do stuff
}  

注意:正如@guido-walter-pettinari 在下面的评论中指出的那样,get_sites() 是实例化一个新的WP_Sites_query 对象的前端,它设置了一些default query parameters,包括'number'网站数量恢复到 100!

【讨论】:

  • 小心:get_sites() 只会列出前 100 个站点!要获得更多网站(例如 500 个),请使用 get_sites( [ "number" => 500 ] );。当然,如果您有超过 500 个网站,使用分页可能是个好主意 :-)
  • 好点,将其添加到答案中。
【解决方案2】:

你可以使用

 <?php wp_get_sites( $args ); ?> 

示例,适用于 bellow v 3.0

<?php
$blog_list = get_blog_list( 0, 'all' );
foreach ($blog_list AS $blog) {
    echo 'Blog '.$blog['blog_id'].': '.$blog['domain'].$blog['path'].'<br />';
}
?>

【讨论】:

【解决方案3】:

当您的目标是与所有多站点版本兼容时,使用 WordPress 功能有点问题:

  • get_blog_list 不仅已弃用,而且也不会返回未标记为公开的网站。奇怪的是,官方文档并没有警告我们(只有在代码失败时才会发现)。
  • 相比之下,get_sites 仅适用于 WP 4.6.0 或更高版本

我更喜欢使用以下代码,它兼容所有 WordPress 版本(当然是从 3.0.0 开始),并返回安装的所有站点(甚至包括存档站点、停用站点等):

global $wpdb;  
$blogs = $wpdb->get_results( "SELECT blog_id, domain, path FROM $wpdb->blogs ORDER BY blog_id" );

如果你想过滤你的结果,不显示存档的,停用的和垃圾网站,你必须在查询中指出如下:

global $wpdb;
$blogs = $wpdb->get_results( "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE archived = '0' AND deleted = '0' AND spam = '0' ORDER BY blog_id" );

注意:$blogs数组是一个对象集合;您必须使用更适合您的每个对象(id、路径、域)中的信息构建自己的站点列表,如 FirefogAurovrata 答案。

【讨论】:

【解决方案4】:

按照通常的方式,您将无法获得博客名称。要获取博客名称,您可以使用这个小技巧,如下所示。

$blog_list = get_blog_list(0, 'all');
foreach ($blog_list as $blog) {
    switch_to_blog( $blog['blog_id'] );
    $option = 'blogname';
    $value = get_option( $option );
    echo $value . '<br />';
    restore_current_blog();
}

另外,您可以使用以下替代方法,通过直接调用数据库来获得相同的结果。

global $wpdb;
foreach ($wpdb->get_results("SELECT blog_id, domain, path FROM $wpdb->blogs WHERE archived = '0' AND deleted = '0' AND spam = '0' ORDER BY blog_id") as $key => $blog) {
    switch_to_blog( $blog->blog_id );
    $option = 'blogname';
    $value = get_option( $option );
    echo $value . '<br />';
    restore_current_blog();
}

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多