Intereting Posts
wordpress не отображает мою форму Как показать главную страницу на другом URL-адресе, например site.com/blog, а не на сайте? Как правильно вставить таблицу стилей в wp_head Изменить заголовок, загруженный jQuery, для использования HTTPS Как вызвать WordPress PHP-файл с помощью внешнего js-файла Пожалуйста, помогите мне с тегом <! – next page -> и php-кодом Как подключиться к базе данных WordPress в плагине? Изменить тему Datepicker Как заставить SSL для всех запросов? WordPress делает бабушку и прадедушку фильтруемой в пользовательских колонках WordPress с пользовательским запросом woocommerce Добавить в корзину кнопка woocommerce фон и с не отображается правильно как установить событие расписания для изменения метаданных всех сообщений еженедельно или ежемесячно? Исключить сообщения с определенными метаданными из результатов поиска Спам-бот любит меня, что я могу сделать?

WP_Query внутри существующего wp_query останавливает следующую запись, показывающую

У меня есть запрос, который показывает 5 последних сообщений на моей домашней странице из блога. После второго сообщения я добавил div #more-news после чего сообщения продолжаются после этого. Все это работало нормально и по порядку, пока я не попытался добавить еще один запрос в div #more-news .

То, что происходит сейчас, это первые два сообщения, которые загружаются штрафом, а затем div #more-news , который содержит следующие 5 сообщений (6,7,8,9,10) после существующих 5, однако после добавления моего второго запроса чем сообщения, продолжающиеся по порядку, отображает заголовок страницы «дом» как четвертый пост, затем третий и четвертый.

Чтобы лучше объяснить, что я за этим, может помочь показать порядок, который я пытаюсь достичь

[1] [2] [ morenews = 6,7,8,9,10 ]

[3] [4] [5]

 <?php $my_query = "showposts=5"; $my_query = new WP_Query($my_query); ?> <?php if ($my_query->have_posts()) :?> <?php $count = 0; ?> <?php while ($my_query->have_posts()) : $my_query->the_post(); ?> <?php $count++; ?> <?php if ($count == 3) : ?> <div id="more-news" class="col-lg-4"> <h2>More News</h2> <?php $mnquery = new WP_Query(array( 'posts_per_page' => 5, 'offset' => 5, )); while ($mnquery->have_posts()): $mnquery->the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </li> <?php endwhile;?> <?php wp_reset_postdata(); ?> </div> <?php endif ?> <div class="col-lg-4"> <article <?php post_class('news-post'); ?>> <div class="innerPost"> <a class="postLink" href="<?php the_permalink(); ?>"> <?php the_post_thumbnail('full', array( 'class' => 'img-responsive')); ?> </a> <div class="postDetails"> <div class="postDetInner"> <header> <div class="arrowpan"></div> </header> </div> </div> </div> <div class="news-post-inner"> <?php $category = get_the_category(); if($category[0]){ echo '<a class="category-link" href="'.get_category_link($category[0]->term_id ).'">'.$category[0]->cat_name.'</a>'; } ?> <h2 class="entry-title"><a href="<?php echo get_permalink(); ?>"><?php echo get_the_title( $ID ); ?> </a></h2> </div> </article> </div> <?php endwhile; // end of one post ?> <?php endif; //end of loop ?> <?php wp_reset_postdata(); ?> 

Solutions Collecting From Web of "WP_Query внутри существующего wp_query останавливает следующую запись, показывающую"

Мы можем упростить ваш код и просто запустить один запрос вместо двух. Ответ заключается в перемотке вашей петли и повторном ее повторении несколько раз. Мы будем использовать счетчик $current_post сборки, $current_post для подсчета наших сообщений. Просто помните, этот счетчик начинается с 0 , а не 1 , поэтому пост 1 будет 0

Итак, вот что нам нужно сделать

  • Запросите 10 сообщений вместо двух циклов из пяти

  • Запустите цикл и отобразите только первые два сообщения

  • Перемотайте наш цикл и перезапустите его и выведите сообщения 6-10

  • Повторно перемотайте наш цикл и снова запустите цикл и покажите сообщения 3-5

В коде ( только для скелета ) вы можете попробовать что-то вроде этого: ( Требуется PHP 5.4+ из-за нового синтаксиса коротких массивов ( [] ), для более старых версий заменить на старый синтаксис array() ) )

 $args = [ 'posts_per_page' => 10 ]; $q = new WP_Query( $args ); if ( $q->have_posts() ) { // Run the loop the first time to display the first two posts while ( $q->have_posts() ) { $q->the_post(); if ( $q->current_post <= 1 ) { // Do what you need to do with the first two posts } } // Rewind the loop $q->rewind_posts(); // Run the loop the second time to display posts 6 - 10 while ( $q->have_posts() ) { $q->the_post(); if ( $q->current_post >= 5 && $q->current_post <= 9 ) { // Do what you need to do with posts 6 - 10 } } // Rewind the loop $q->rewind_posts(); // Run the loop the third time to display posts 3 - 5 while ( $q->have_posts() ) { $q->the_post(); if ( $q->current_post >= 2 && $q->current_post <= 4 ) { // Do what you need to do with posts 3 - 5 } } wp_reset_postdata(); }