我有一个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_
)?
最合适的回答,由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
价值观
restore_current_blog()
get_posts()
get_permalink()
WP_Post
usort()
[*]:最初WordPress使用术语“博客的网站”。后来,它被细化为“一个由多个站点组成的网络”,但一些函数名仍然反映了旧的方式。