Как я могу запросить все сообщения одного типа в моей многоуровневой установке?

У меня есть многопользовательская установка WordPress с 5 сайтами, и на каждом сайте есть один и тот же 4 пользовательский тип сообщения,

Я хочу запросить последние 5 сообщений на всех сайтах, где post_typegallery

возможно ли получить wp_query() чтобы wp_query() все блоги на сайте, а не только текущий блог?

Solutions Collecting From Web of "Как я могу запросить все сообщения одного типа в моей многоуровневой установке?"

Да, но не в одном запросе, например:

 if(is_multisite()){ 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){ switch_to_blog($blog->blog_id); $details = get_blog_details($blog->blog_id); $q = new WP_query(); if($q->have_posts()){ while($q->have_posts()){ $q->the_post(); // do things break; } } wp_reset_query(); restore_current_blog(); } } } в if(is_multisite()){ 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){ switch_to_blog($blog->blog_id); $details = get_blog_details($blog->blog_id); $q = new WP_query(); if($q->have_posts()){ while($q->have_posts()){ $q->the_post(); // do things break; } } wp_reset_query(); restore_current_blog(); } } } 

Если вы хотите показать последнее сообщение в каждом отдельном блоге, это должно быть легко. Если вы хотите показать отдельную новую запись по всей сети, вам нужно будет найти самую новую из каждого блога, вам нужно будет сохранить самую новую найденную запись, заменив ti, когда будет найдена новая запись, а затем вывести после цикла ,

switch_to_blog ОЧЕНЬ дорого … вот какой-то код, который я использую (я использую свой собственный пейджер и поисковые вары)

 function recent_mu_posts($howmany, $paged, $when, $until, $search) { /* returns array of posts from all blogs in $blogs, newer than $when * older than $until, containing $search */ global $options; global $wp_query; global $blogs; global $wpdb; global $table_prefix; $blogPostTableNames = get_mu_tables(); if ( count( $blogPostTableNames ) > 0 ) : $query = ''; $i = 0; foreach ( $blogPostTableNames as $blogId => $tableName ) : if ( $i > 0 ) : $query.= ' UNION '; endif; $query.= " (SELECT ID, post_date, $blogId as `blog_id` FROM $tableName WHERE post_status = 'publish' AND post_type = 'post' AND post_date >= '$when' AND post_date <= '$until'"; if (isset($search)) $query.= " AND ( post_content COLLATE UTF8_GENERAL_CI LIKE '%{$search}%' OR post_title COLLATE UTF8_GENERAL_CI LIKE '%{$search}% ')"; $query.=")"; $i++; endforeach; $query.= " ORDER BY post_date DESC "; /* pagination */ $totalposts = $wpdb->get_results($query, OBJECT); $ppp = intval( get_query_var( 'posts_per_page' ) ); $on_page = $paged; #intval( get_query_var( 'paged' ) ); if( $on_page == 0 ) $on_page = 1; $offset = ( $on_page - 1 ) * $ppp; //set global $wp_query object for pagination $wp_query->found_posts = count($totalposts); $wp_query->max_num_pages = ceil($wp_query->found_posts / $ppp); $wp_query->request = $query . " LIMIT $ppp OFFSET $offset"; //= " LIMIT $ppp OFFSET $offset"; $rows = $wpdb->get_results( $wp_query->request, OBJECT); if ( $rows ) : $posts = array(); $i=0; global $post; foreach ( $rows as $post ) : $posts[$i] = get_blog_post( $post->blog_id, $post->ID ); $posts[$i]->blog_id = $post->blog_id; $i++; endforeach; $wp_query->posts = $posts; return $posts; endif; endif; }