Intereting Posts
Есть ли способ добавить FLV видео в player.js в WordPress? Является ли их способ разбивать теги на wordpress в моем случае, я хочу разбивать на фрагменты 1 тега, как показано ниже Как установить значения по умолчанию для edit_post_link () в моей теме? Загрузите несколько изображений с помощью media_handle_upload с несколькими полями файлов Параметры URL, вызывающие 404 на главной странице, но нигде больше Как получить название текущего меню в качестве переменной? Как я могу получить идентификатор изображения с помощью медиа-бокса? Как перечислить многоязычные языки WP Как я могу легко добавить код в тег <body> без использования перехватчиков? Отображение списка тегов на моей странице архивов Использовать шаблон страницы вместо персонализированного архива типа сообщения remove_cap ничего не меняется Правила перезаписи исчезают через некоторое время Разбор короткого кода по-разному основан на том, что он вложен в как избежать wp_oembed_get для phpcs

Почему первый запрос влияет на второй запрос, даже после wp_reset_query () и wp_reset_postdata (), но не на второй странице?

Я в буквальном смысле не знаю, почему код не работает должным образом на первой странице, но функционирует так, как ожидалось на второй странице. Второй запрос должен возвращать последние 3 сообщения в цикле pagination, но он также возвращает сообщения из первого запроса. Вместо 3 сообщений на главной странице есть 6, но на второй странице вы видите ожидаемый 3.

Мой код ниже:

<section id="main" class="c6" role="main"> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> <header> <h2>Featured Posts</h2> <div class="slider"> <div class="slides"> <?php wp_reset_query(); ?> <?php $sticky_query = new WP_Query('nopaging=true'); ?> <?php if(have_posts()) : while ($sticky_query->have_posts()) : $sticky_query->the_post(); ?> <?php if(is_sticky()) : ?> <div class="slide"><a rel="bookmark" href="<?php the_permalink(); ?>"><?php echo the_post_thumbnail('full'); ?><h2><?php the_title(); ?></h2></a></div> <?php endif; ?> <?php endwhile; else: ?> <p>Sorry, no posts matched your criteria.</p> <?php endif; ?> <?php wp_reset_postdata(); ?> <div class="left-arrow"></div> <div class="right-arrow"></div> </div> </div> </header> <footer> <h3>The New Stuff</h3> <ul> <?php wp_reset_query(); ?> <?php query_posts('showposts=3&paged='.$paged); ?> <?php if(have_posts()) : while(have_posts()) : the_post(); ?> <div class="clearfix"><li> <h4><a rel="bookmark" href="<?php the_permalink(); ?>"> <?php echo the_post_thumbnail('full'); ?> <span><?php the_title(); ?></span> </a></h4> <?php the_excerpt(); ?> </li></div> <?php endwhile; else: ?> <p>Sorry, no posts matched your criteria.</p> <?php endif; ?> <?php wp_reset_query(); ?> </ul> </footer> </section> 

Я что-то делаю неправильно, или это будет ожидаемый результат?

Solutions Collecting From Web of "Почему первый запрос влияет на второй запрос, даже после wp_reset_query () и wp_reset_postdata (), но не на второй странице?"

Я вижу ряд проблем, кроме использования query_posts (это должно вызвать немедленные сигнальные колокола). Я настоятельно рекомендую вам не использовать синтаксис alt, и что вы минимизируете ненужные открывающие и закрывающие PHP-теги, поскольку это затмевает ваш код.

Вот очищенная версия вашего первого цикла запросов:

 if(have_posts()) { while ($sticky_query->have_posts()) { $sticky_query->the_post(); if(is_sticky()) { ?> <div class="slide"><a rel="bookmark" href="<?php the_permalink(); ?>"><?php echo the_post_thumbnail('full'); ?><h2><?php the_title(); ?></h2></a></div> <?php } } } else { ?> <p>Sorry, no posts matched your criteria.</p> <?php } wp_reset_postdata(); 

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

Затем вы сразу же следуете этому с помощью цикла query_posts , вот очищенная версия:

 wp_reset_query(); query_posts('showposts=3&paged='.$paged); ?> <?php if(have_posts()) { while(have_posts()) { the_post(); ?> <div class="clearfix"><li> <h4><a rel="bookmark" href="<?php the_permalink(); ?>"> <?php echo the_post_thumbnail('full'); ?> <span><?php the_title(); ?></span> </a></h4> <?php the_excerpt(); ?> </li></div> <?php } } else { ?> <p>Sorry, no posts matched your criteria.</p> <?php } wp_reset_query(); которого wp_reset_query(); query_posts('showposts=3&paged='.$paged); ?> <?php if(have_posts()) { while(have_posts()) { the_post(); ?> <div class="clearfix"><li> <h4><a rel="bookmark" href="<?php the_permalink(); ?>"> <?php echo the_post_thumbnail('full'); ?> <span><?php the_title(); ?></span> </a></h4> <?php the_excerpt(); ?> </li></div> <?php } } else { ?> <p>Sorry, no posts matched your criteria.</p> <?php } wp_reset_query(); 

Immediatley вы вызываете wp_reset_query , несмотря на отсутствие запроса для очистки. Это не имеет никакого смысла.

Затем вы выполните запрос query_posts. Как упоминалось ранее, это невероятно плохая практика. Никогда не используйте query_posts. Вместо этого рассмотрите использование WP_Query, как вы это делали ранее.

Итак, подведем итог:

  • Если у вас нет хорошей IDE и очень сильное понимание вашей семантической структуры, не используйте синтаксис alt while: endwhile; подсказка: если вы думаете, что можете, вы, вероятно, не сможете
  • Ненужные теги следует исключить. Это уродливо, это заслоняет ваш код, и это лишнее время, проведенное набирать текст. Отделите свой html и вашу логику PHP и не делайте логику и обработку в середине html-структуры, когда это возможно
  • Никогда , ни при каких обстоятельствах, используйте query_posts. Нет допустимого использования, которое не распространяется на WP_Query или фильтр pre_get_posts
  • НИКОГДА не используйте query_posts
  • Уборка после запросов хороша, но чрезмерная очистка плоха и может мешать другому коду
  • Постоянный отступ кода очень важен

Я вижу потенциальную ошибку здесь:

 <?php $sticky_query = new WP_Query('nopaging=true'); ?> <?php if(have_posts()) : while ($sticky_query->have_posts()) : $sticky_query->the_post(); ?> 

Вы if($sticky_query->have_posts()) виду if($sticky_query->have_posts()) ?

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

Кроме того, как упоминал Том Дж. Новелл , у вас есть wp_reset_query() , который, я догадывался, ничего не может сделать, потому что вам нечего сбросить. НО! Вы используете query_var , так что вы, возможно, также перезагружаете этот var, который изменяет ваши подзапросы. Удалите это определенно.