function include_tags_in_search( WP_Query $query ): void{
$search_terms = $query->get( 's' );
if ( $query->is_search() ) {
global $the_original_paged;
$the_original_paged = $query->get( 'paged' ) ? $query->get( 'paged' ) : 1;
if ( ! $search_terms ) {
add_action( 'wp', function () use ( $query ) {
$query->set_404();
status_header( 404 );
nocache_headers();
} );
}
$query->set( 'paged', null );
$query->set( 'post_type', array( 'post', 'product' ) );
$query->set( 'posts_per_page', SEARCH_GRID_COUNT_ITEMS );
}
}
add_action( 'pre_get_posts', 'include_tags_in_search' );
function add_posts_by_tags( $posts, WP_Query $query ): array {
if ( $query->is_search() ) {
global $the_original_paged;
remove_filter( 'the_posts', 'add_posts_by_tags' );
$posts_product_cat = new WP_Query( array(
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'product_tag',
'field' => 'name',
'terms' => explode( ' ', esc_attr( $query->get( 's' ) ) )
)
)
) );
$merged = array_unique( array_merge( $posts, $posts_product_cat->get_posts() ), SORT_REGULAR );
$posts = array_slice( $merged, ( SEARCH_GRID_COUNT_ITEMS * ( $the_original_paged - 1 ) ), SEARCH_GRID_COUNT_ITEMS );
$query->found_posts = $posts;
$query->set( 'paged', $the_original_paged );
$query->post_count = count( $posts );
$query->max_num_pages = ceil( count( $merged ) / SEARCH_GRID_COUNT_ITEMS );
unset( $the_original_paged );
return $posts;
}
return $posts;
}
add_filter( 'the_posts', 'add_posts_by_tags', 10, 2 );
Источник