WP MS:如何通过网络进行查询

时间:2014-02-28 作者:Mathias

我有一个WP 3.8.1多站点安装和3个博客,它们都在一个db中,前缀为wp_, wp_2_wp_3_.

在中的模板中wp_ 我尝试显示来自wp_, wp_2_wp_3_ 附有类别xxx。我想按时间顺序显示帖子。我尝试了以下查询:

SELECT * 
FROM $wpdb->posts
    INNER JOIN $wpdb->term_relationships ON $wpdb->posts.ID= $wpdb->term_relationships.object_id
    INNER JOIN $wpdb->term_taxonomy ON $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
    INNER JOIN $wpdb->terms ON $wpdb->term_taxonomy.term_id=$wpdb->terms.term_id WHERE $wpdb->terms.name = \'xxx\'
ORDER BY $wpdb->posts.post_date DESC
这只适用于当前的博客(不包括wp_2_wp_3_.

如何从中检索类别为xxx的所有帖子wp_, wp_2_, wp_3_ (而不仅仅是wp_)?

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

多站点网络中的每个站点都被认为是一个独立的站点。所有的$wpdb 值(例如,$wpdb->posts) 对于每个站点都是不同的。

您可以使用switch_to_blog()restore_current_blog() 要从网络中的各个网站[*]获取内容(帖子等),请执行以下操作:

$sites = array( 1, 2, 3, );
$all_posts = array();
$args = array( \'category_name\' => \'xxx\', );
foreach( $sites as $site ) {
    switch_to_blog( $site );
    $posts = get_posts( $args );
    foreach( $posts as $post ) {
        // Better get the post\'s permalink, since it\'s site-dependent
        $post->permalink = get_permalink( $post->ID );
        $all_posts[] = $post;
    }
    restore_current_blog();
}
这将为您获得一个包含来自每个站点的所有帖子的数组——每个帖子都将以WP_Post 对象要按日期对它们进行排序,可以使用PHP的usort() 函数并比较$post->post_date$post->post_date_gmt 价值观

参考文献switch_to_blog()
  • restore_current_blog()
  • get_posts()
  • get_permalink()
  • WP_Post
  • usort()

    • [*]:最初WordPress使用术语“博客的网站”。后来,它被细化为“一个由多个站点组成的网络”,但一些函数名仍然反映了旧的方式。

    结束

    相关推荐

    使用带有jQuery插件Jedable的AJAX在定制表上插入查询

    我已经读了很多帖子,但没有找到解决办法。。。我正在努力实现Jeditable 具有以下代码的插件中的功能:jQuery(document).ready(function() { jQuery(\'.edit\').editable(\'http://localhost/www/wp-content/plugins/my_plugin/save.php\' }); 如果在中save.php 我只是回显一些东西,它将返回到我正在更新的文本字段,没有问题。问题是如何将其插入数据