Я применяю фильтры 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;
Я ожидаю, что фильтр будет применяться только к результатам поиска, а не к содержимому виджета, отображаемому на странице поиска.