Фильтр применяется к неожиданным запросам - PullRequest
0 голосов
/ 07 мая 2019

Я применяю фильтры get_the_excerpt и get_the_content к результатам поиска для пользовательского типа записи. Кажется, фильтры применяются к дополнительным запросам в виджетах, а не только к поисковому запросу. Можно ли ограничить фильтр только применением поискового запроса.

Я пытался ограничить фильтр, чтобы он применялся только при определенных условиях, но, похоже, он не соответствует условиям:

Добавление фильтров

add_filter( 'get_the_excerpt', 'CourseStorm_Templates::coursestorm_alter_search_results_content' );
add_filter( 'get_the_content', 'CourseStorm_Templates::coursestorm_alter_search_results_content' );

Код фильтра

// Get post taxonomies
$taxonomies = get_post_taxonomies();

// Alter post output for courses on the search page.
if ( in_array( 'my_custom_post_type', $taxonomies ) && is_search() && is_main_query()) :
    // do stuff to alter display of CPT
endif;

У меня есть запрос в виджете, к которому применяется это изменение, когда виджет отображается на странице поиска. Я подтвердил, что запрос виджета не выполняет хотя бы одно из условий (is_search()), поэтому его не следует применять.

Запрос виджета

$query_args = array(
    'post_type'   => 'my_custom_post_type',
    'tax_query'   => array(
        array(
            'taxonomy' => 'my_category',
            'field' => 'id',
            'terms' => '0',
        )
    ),
);
$the_query = new WP_Query( $query_args );

if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
        $post_id = $the_query->post->ID;
        $meta = get_post_meta( $post_id );
        $title = get_the_title( $post_id );
        the_excerpt(); // the alterations from the filter are getting applied here.
    endwhile;

    wp_reset_query();
endif;

Я ожидаю, что фильтр будет применяться только к результатам поиска, а не к содержимому виджета, отображаемому на странице поиска.

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете использовать remove_filter check docs , функцию для удаления фильтра для виджета WP_Query. В зависимости от того, где находится боковая панель вашего виджета до или после основного цикла сообщений, вы можете добавить фильтр обратно после пользовательского WP_Query. поэтому ваш запрос виджета будет выглядеть так:

// remove filters before
remove_filter( 'get_the_excerpt', 'CourseStorm_Templates::coursestorm_alter_search_results_content' );
remove_filter( 'get_the_content', 'CourseStorm_Templates::coursestorm_alter_search_results_content' );

$the_query = new WP_Query( $query_args );

if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
        $post_id = $the_query->post->ID;
        $meta = get_post_meta( $post_id );
        $title = get_the_title( $post_id );
        the_excerpt();
    endwhile;

    wp_reset_query();
endif;

// add filters back
add_filter( 'get_the_excerpt', 'CourseStorm_Templates::coursestorm_alter_search_results_content' );
add_filter( 'get_the_content', 'CourseStorm_Templates::coursestorm_alter_search_results_content' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...