Intereting Posts
Как перенаправить правильные страницы после изменения структуры ссылки Как программно добавлять элементы в пользовательское меню Как предотвратить загрузку изображений с несколькими размерами в Foreach Loop Описание не отображается? Удалите первое изображение, но только с определенного года Удалить «Комментарии закрыты» Уведомление из шаблона пользовательского типа отправки Могу ли я изменить, какие поля отображаются в форме комментариев? Допустимый размер памяти исчерпан. Решение для WordPress WP admin bar только на некоторых страницах Не могу удалить пробел на моем wordpress Возможности WP для добавления медиа, использования медиа, но не редактирования их как сделать изображения в столбце полной ширины Отладка тем WordPress с помощью Xdebug, выход html в реальном времени Добавить пользовательский столбец в пользовательский тип типа сообщений в бэкэнд Создать цикл сообщений, который отображает страницы с идентификатором cat

Объединение нескольких объектов wp_query

У меня есть код ниже для многоуровневой установки. Он отлично работает, но мне нужно объединить каждый объект цикла WP_Query из каждого мультисайта вместе для использования в другом шаблоне с циклом WordPress. Это возможно. Я попытался слить объекты с помощью:

$obj_merged = (object) array_merge((array) $obj1, (array) $obj2); 

Но это не работает, поскольку объекты содержат функции. Идеи?

 <?php // Set up global variables. Great global $wpdb, $blog_id, $post, $merged_loop; // Get a list of blogs in your multisite network $blogs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM ftc_blogs ORDER BY blog_id" ) ); // Iterate through your list of blogs foreach ($blogs as $blog){ // Switch to the next blog in the loop. // This will start at blog_id == 1 because of the ORDER BY statement. switch_to_blog($blog->blog_id); // Get the 5 latest posts for the blog and store them in the $query variable. $args = array( 'post_type' => array('post', 'page'), 'category_name' => 'dashboard', 'posts_per_page' => 5 ); $loop = new WP_Query( $args ); // need to merge $loop data into $merged_loop for use in template. // Switch back to the main blog restore_current_blog(); } endif; ?> 

Solutions Collecting From Web of "Объединение нескольких объектов wp_query"

Если вам просто нужны сообщения каждого объекта WP_Query, вы можете сделать что-то вроде этого:

 <?php // fetch blogs here $all_posts = array() foreach($blogs as $b) { switch_to_blog($b->blog_id); $query = new WP_Query(/* your args here */); if($query->have_posts()) $all_posts = array_merge($all_posts, $query->posts); // posts are stored in the `posts` property restore_current_blog(); // FYI: this tends to slow things down } 

Похоже, в этом случае вам может быть лучше просто использовать get_posts вместо создания вручную создания объекта WP_Query. Вам просто нужен массив результатов, что и делает get_posts – конечно, он использует WP_Query за кулисами.

 <?php // fetch blogs here $all_posts = array() foreach($blogs as $b) { switch_to_blog($b->blog_id); $posts = get_posts(/* your args here */); if($posts) $all_posts = array_merge($all_posts, $posts); restore_current_blog(); } 

Вы должны знать, что такие функции, как get_post_meta и т. П., Не будут работать так, как вы хотите, когда вы, наконец, зайдете через сообщения – у вас почти всегда будет работать каждый пост-объект.