Wie kann ich alle Posts eines Typs in meiner Multisite-Installation abfragen?

Ich habe eine Multi-Site-Wordpress-Installation mit 5 Sites, und innerhalb jeder Site gibt es die gleichen 4 benutzerdefinierten Post-Typ,

Ich möchte die letzten 5 Posts auf allen Sites abfragen, auf denen der post_type gallery

wp_query() es möglich, wp_query() zu bringen, über alle Blogs innerhalb der Site hinweg statt nur über den aktuellen Blog zu gehen?

Solutions Collecting From Web of "Wie kann ich alle Posts eines Typs in meiner Multisite-Installation abfragen?"

Ja, aber nicht in einer einzigen Abfrage, zB:

 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(); } } } 

Wenn Sie den neuesten Beitrag in jedem einzelnen Blog anzeigen möchten, sollte das einfach sein. Wenn Sie den einzelnen neuesten Post im gesamten Netzwerk anzeigen möchten, müssen Sie das neueste von jedem Blog finden. Sie müssen den neuesten gefundenen Post speichern, ti ersetzen, wenn ein neuerer Post gefunden wird, und dann nach der Schleife ausgeben .

switch_to_blog ist sehr teuer … hier ist ein Code, den ich benutze (ich benutze meine eigenen Pager und Abfrage vars)

 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; }