Intereting Posts
Самый быстрый способ создания уникального идентификационного номера при регистрации пользователя Как напечатать значения настраиваемых полей Добавление короткого кода в текстовый виджет Показать одну категорию на почте Как ограничить максимальное количество символов в отображаемом заголовке Использование wp_schedule_event для отправки писем, включая ссылки Выполнить функцию обновления плагина Как сохранить переменную `$ post` для использования в другом файле Объедините результаты нескольких WP_Query, чтобы они были похожи на один WP_Query Как мне вызвать функцию для использования на странице? Как разрешать пользователям просматривать собственные профили Buddypress? Плагин, который добавляет значок рядом со ссылками Перенаправление после обновления пароля Решение Javascript Удалите специфический тег, но оставите все остальное в определенном DIV Использование метаданных треков из аудиокода

Query * только * липкие сообщения

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

<?php $args = array( 'post_type' => 'post', 'posts_per_page' => 2, 'post__in' => get_option('sticky_posts') ); ?> <?php query_posts($args); ?> <?php if(have_posts()) : ?> <?php get_template_part('loop', 'feed-top-stories' ); ?> <?php endif; ?> <?php wp_reset_query(); ?> 

В настоящее время у меня нет сообщений на листе на сайте. Что говорит мне, что в цикле ничего не должно появляться. Тем не менее, я обнаружил, что он все равно занимал 2 должности (хотя они не были липкими)

Итак, я переключился на объект WP_Query (поскольку мне было рекомендовано избегать query_posts() в прошлом)

 <?php $args = array( 'post_type' => 'post', 'post__in' => get_option( 'sticky_posts' ), 'posts_per_page' => 2 ); $the_query = new WP_Query($args); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); get_template_part('loop', 'feed-top-stories' ); endwhile; endif; wp_reset_postdata(); ?> 

Но теперь он, похоже, не работает вообще, цикл, кажется, выводит 2 сообщения, однако обе они являются просматриваемой страницей, несмотря на то, что я устанавливаю параметр post_type

Solutions Collecting From Web of "Query * только * липкие сообщения"

В настоящее время у меня нет сообщений на листе на сайте. Что говорит мне, что в цикле ничего не должно появляться.

Именно там, где вы ошибаетесь при передаче пустого массива в post__in . WordPress имеет некоторые глупые ошибки, которые не имеют надлежащего обходного пути и, скорее всего, будут оставаться активными ошибками в течение очень долгого времени. Это одна из них.

Когда мы передаем действительный массив идентификаторов сообщений для post__in , мы получаем следующее результирующее WHERE SQL WHERE ( ПРИМЕЧАНИЕ: все тесты выполняются на странице)

 AND wp_posts.ID IN (59,45) AND wp_posts.post_type = \'post\' AND (wp_posts.post_status = \'publish\' OR wp_posts.post_status = \'private\') 

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

 AND wp_posts.ID IN (59) AND wp_posts.post_type = \'post\' AND (wp_posts.post_status = \'publish\' OR wp_posts.post_status = \'private\') 

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

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

Еще одно замечание, которое может не иметь никакого смысла, если вам просто нужно запрашивать липкие сообщения, всегда устанавливайте ignore_sticky_posts на 1 ( true ). Причина этого заключается в том, что если вам не нужно запрашивать все липкие сообщения или просто листы из определенной категории, вы получаете только те, которые вам нужны. Если вы не игнорируете листы, все листы будут возвращены независимо от того, что вы запросили ( еще одна глупая ошибка, на мой взгляд ).

Вы можете переписать свой код следующим образом

 $stickies = get_option( 'sticky_posts' ); // Make sure we have stickies to avoid unexpected output if ( $stickies ) { $args = [ 'post_type' => 'post', 'post__in' => $stickies, 'posts_per_page' => 2, 'ignore_sticky_posts' => 1 ]; $the_query = new WP_Query($args); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); get_template_part('loop', 'feed-top-stories' ); } wp_reset_postdata(); } }