Intereting Posts
Может ли пользователь № 1 (первоначальный пользователь) быть удален без вреда? Как получить XML-файл для одного типа сообщений? Показать список CPT, отфильтрованный по 2 пользовательским таксономии, где 1 таксономия должна находиться в выпадающем меню API настроек – генерирование значения поля на основе другого поля? Ошибка 404 WordPress is_archive () возвращает false на странице архивов Индикатор активного меню с подстраницами? Отображать результат запроса метаданных Глубоко вложенная петля меню с веточкой с использованием дерева wpdb-> prepare и mysql UPDATE – как это делается? Перенаправить на страницу 2 после комментария Почему функция «activate_plugins» необходима, чтобы роль могла видеть все сообщения / страницы / комментарии? DNS – Изменить имя сайта WordPress? дополнительный код в <head> – пустая функция jquery Список последних комментариев из многосайтовой сети

Получение настраиваемого поля в середине цикла

есть ли способ, которым я могу получить

<?php the_field("do_stuff")?> 

идти в середине многократного цикла следующим образом:

  <?php query_posts('cat=4&posts_per_page=5'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <h1><?php the_title() ;?></h1> <?php the_post_thumbnail(); ?> <?php the_excerpt(); ?> <?php endwhile; else: ?> <p>Sorry, there are no posts to display</p> <?php endif; ?> <hr> <?php rewind_posts(); ?> <?php query_posts('cat=5&posts_per_page=5'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <h2><?php the_title() ;?></h2> <?php the_excerpt(); ?> <?php endwhile; else: ?> <p>Sorry, there are no posts to display</p> <?php endif; ?> 

Я попытался положить его выше rewind_posts и чуть ниже его, но он не отображается? Код поля является частью плагина «Дополнительные пользовательские поля», и я хотел бы, чтобы пользователь мог опубликовать то, что когда-либо захочет, между двумя разделами сообщений.

благодаря

Вы не должны использовать query_posts вообще, это просто проблематично и подвержено ошибкам

Примечание. Эта функция не предназначена для использования плагинами или темами. Как поясняется ниже, есть более эффективные, более эффективные варианты для изменения основного запроса. query_posts () является слишком упрощенным и проблематичным способом изменения основного запроса страницы путем замены его новым экземпляром запроса. Он неэффективен (повторно запускает SQL-запросы), и в некоторых случаях он будет неудачно (особенно часто при разбиении на страницы)

Я даже не знаю, что вам нужно запускать пользовательский запрос вообще, не говоря уже о двух. Я думаю, что вы пытаетесь сделать здесь, это разделить фактический запрос на две части только для того, чтобы добавить свое настраиваемое поле между post one и two

Я просто вернусь к основному запросу и использую его как есть. Счетчик встроенных циклов $wp_query->current_post доступен в любом месте вашего шаблона, поэтому вы можете использовать его для подсчета ваших сообщений

Это не проверено, но вы, скорее всего, можете сделать что-то подобное. Просто добавьте это после своего цикла. * Remeber, счетчик циклов начинается с нуля, а не один

 if( 0 == $wp_query->current_post ) { // Add whatever you need to add to appear after post one } 

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

 if( 0 == $wp_query->current_post || 0 == $wp_query->current_post%JUST_ADD_YOUR_POSTS_PER_PAGE_VALUE_HERE ) { // Add whatever you need to add to appear after post one } 

РЕДАКТИРОВАТЬ

Динамика резко изменилась, поэтому мой первый подход не сработает. Вам нужно будет запустить два пользовательских цикла только из-за того, что оба они совсем разные. Я бы предложил использовать WP_Query вместо query_posts . Вы даже можете использовать get_posts качестве другой альтернативы.

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

Попробуйте что-то вроде этого

  <?php $query_one = new WP_Query('cat=4&posts_per_page=5'); ?> <?php if ( $query_one->have_posts() ) : while ( $query_one->have_posts() ) : $query_one->the_post(); ?> <h1><?php the_title() ;?></h1> <?php the_post_thumbnail(); ?> <?php the_excerpt(); ?> <?php endwhile; else: ?> <p>Sorry, there are no posts to display</p> <?php endif; ?> <?php wp_reset_postdata(); // VERY VERY IMPORTANT?> <hr> <?php // PLACE YOUR FIELD HERE ?> <?php $query_two = new WP_Query('cat=5&posts_per_page=5'); ?> <?php if ( $query_two->have_posts() ) : while ( $query_two->have_posts() ) : $query_two->the_post(); ?> <h2><?php the_title() ;?></h2> <?php the_excerpt(); ?> <?php endwhile; else: ?> <p>Sorry, there are no posts to display</p> <?php endif; ?> <?php wp_reset_postdata(); // VERY VERY IMPORTANT?> 

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

 wp_reset_postdata(); the_field("do_stuff"); 

Если вы не передадите второй аргумент в the_field он будет использовать все, что находится в глобальном $post->ID . Вы также можете передать явный идентификатор сообщения, который вы хотите получить из полей:

 $the_id_of_my_page = 42; the_field( "do_stuff", $the_id_of_my_page );