Таксономия – исключить формат публикации с экрана на странице

Я пытаюсь настроить таксономию, чтобы скрыть post_format на определенной странице.

Я создал ниже, который останавливает отображение post_format на странице, но также скрывает его на странице «Сообщения» на CMS. Есть ли способ обойти это?

function exclude_campaigns( $query ) { if( $query->is_main_query() && $query->is_home() ) { $tax_query = array( array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => array( 'post-format-link' ), 'operator' => 'NOT IN', ) ); $query->set( 'tax_query', $tax_query ); } } add_action( 'pre_get_posts', 'exclude_campaigns' ); 

Обновленная функция:

 // Exclude post-format from one particular page function exclude_campaigns( $query ) { // is_page() allows for page ID, page title or page slug if( $query->is_main_query() && $query->is_page(239) ) { $tax_query = array( array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => array( 'post-format-link' ), 'operator' => 'NOT IN', ) ); $query->set( 'tax_query', $tax_query ); } } add_action( 'pre_get_posts', 'exclude_campaigns' ); 

Solutions Collecting From Web of "Таксономия – исключить формат публикации с экрана на странице"

Если вы пытаетесь скрыть пост-формат на одной конкретной странице, то работающая ниже функция должна работать.

 <?php // Exclude post-format from one particular page function exclude_campaigns( $query ) { // is_page() allows for page ID, page title or page slug if( $query->is_main_query() && $query->is_page( INSERT_PAGE_ID_HERE ) ) { $tax_query = array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => array( 'post-format-link' ), 'operator' => 'NOT IN', ); $query->set( 'tax_query', $tax_query ); } } add_action( 'pre_get_posts', 'exclude_campaigns' ); 

pre_get_posts изменяет все запросы, back-end и front-end, новые экземпляры WP_Query и основной запрос по умолчанию. Вы должны использовать pre_get_posts в сочетании с условными тегами .

Наиболее важными условными тегами здесь являются:

  • is_main_query() -> Используется для таргетинга только основного запроса, исключая все пользовательские экземпляры WP_Query

  • is_admin() -> Очень важно, с этим условным вы можете ориентироваться только на задние запросы. Для этого вам понадобится отрицательный !is_admin() поскольку вам нужно настроить таргетинг на конец !is_admin() а не на back-end (admin side)

Остальные условные обозначения могут использоваться для таргетинга на определенные страницы. Вам необходимо проверить, что вам нужно, и применить его по мере необходимости.

 if( $query->is_main_query() && $query->is_home() ) { 

должен стать

 if( !is_admin() && $query->is_main_query() && $query->is_home() ) { 

который применит только ваши изменения к основному запросу front-end на главной странице

Я действительно верю, что is_page() здесь не подходит. Вам нужно будет проверить, что это за страница, а затем использовать правильный условный тег. Например, если это домашняя страница, используйте is_home() , или если это страница категории, используйте is_category() .