У меня есть шаблон index.php
внутри моей темы, с простым l oop для отображения сообщений, например:
<section class="c-section overflow-hidden pt-0">
<div class="o-wrapper">
<?php
if ( have_posts() ) : $i=0;
?>
<div class="row col-gutters pt-6">
<?php while ( have_posts() ) : the_post(); ?>
<div class="col-md-6 mb-3">
<?php $thumb_id = get_post_thumbnail_id();
$cardDate = get_the_date();
$cardTitle = get_the_title();
$cardExcerpt = get_excerpt();
$cardLink = get_the_permalink();
$cardExternal = get_field('external_article');
$cardExternalLink = get_field('external_article_link');
$cardExternalSource = get_field('external_article_source');
include(locate_template('_components/card-newsroom.php'));
$i++;?>
</div>
<?php endwhile;?>
</div>
<?php endif;?>
</div>
</section>
Я пытаюсь использовать pre_get_posts
в functions.php
изменить количество отображаемых сообщений и удалить сообщения определенного типа.
function remove_news_posts( $query ) {
if ( $query->is_main_query() && !is_front_page() && !is_page() && !is_page_template() && !is_search() && !is_feed() && !is_tax() && !is_admin()) :
$query->set( 'meta_query', array(
'relation' => 'AND',
array(
'key' => 'external_article',
'value' => 0,
'compare' => 'LIKE',
)
));
$query->set( 'posts_per_page', '6');
}
add_action( 'pre_get_posts', 'remove_news_posts', 1000 );
Однако - это не работает. Количество сообщений на странице не равно 6, и мета-запрос также не влияет на отображаемые сообщения. У меня есть шаблон category.php
, который почти идентичен, и фильтр pre_get_posts()
там работает. Если я удаляю $query->is_main_query()
из оператора pre_get_posts
if
, он работает нормально. Но тогда это также влияет на другие запросы, которые я не хочу затрагивать (например, на боковых панелях).
Почему is_main_query()
не возвращает true, если я ожидаю, что он вернет true?