Что означает ignore_sticky_posts?

10.12.2021

Многие думают, что ignore_sticky_posts в соответствии с переводом означает “исключить прикрепленные посты” из цикла. Но на самом деле значение этого параметра совсем другое.

Вы должны читать аргумент 'ignore_sticky_posts' => 1 следующим образом:

  • Если ignore_sticky_posts установлено значение true или 1, WordPress будет игнорировать процедуру установки прикрепленных постов в вашем кастомном цикле.
  • То есть sticky посты будут идти в общем цикле и не будут выводиться первыми.

Что делает WordPress, если ignore_sticky_posts не задан?

Чтобы четко понимать, что 'ignore_sticky_posts' => 1 делает, вам нужно понимать, что делает WordPress, когда ignore_sticky_posts аргумент не установлен или установлен на false или 0 (по умолчанию):

  1. Если в цикле есть прикрепленные записи, WordPress поместит их в начало результата цикла.
  2. Если в цикле нет прикрепленных записей, то WordPress получит все прикрепленные записи из базы данных и установит их в начало цикла.

Поэтому, когда аргумент установлен как 'ignore_sticky_posts' => 1, WordPress просто игнорирует описанную выше процедуру , вот и все. Это не исключает их специально. Для этого вам нужно установить post__not_in аргумент.

Пояснение к примеру кодекса:

А теперь перейдем к примеру из кодекса. Выводим стики пост:

$args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' ),
    'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );

Здесь параметр 'ignore_sticky_posts' => 1 нацелен только на эффективность, не более того . Можно даже его не указывать, вы получите тот же ожидаемый результат:

$args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' )
);
$query = new WP_Query( $args );

Однако в этом случае, поскольку 'ignore_sticky_posts' => 1 аргумент не установлен, WordPress без необходимости будет выполнять всю эту процедуру по установке прикрепленных сообщений в начало результатов, даже если все эти результаты (из этого примера) являются только прикрепленными сообщениями.

Чтобы в цикле не выводились sticky посты, нужно использовать такие параметры:

$args = array(
    'posts_per_page' => -1, // show all posts 
    'post__not_in'=>get_option('sticky_posts') // without sticky posts
);
$query = new WP_Query( $args );

Рекомендую к прочтению:

Оставить комментарий