Woocommerce 按标题或产品标签搜索产品

我使用下面的代码来搜索产品,但我只需要按标题或产品标签搜索产品。我怎样才能做到呢?


function search_by_title_or_tags( WP_Query $query ): void{

    $search_terms = $query->get( 's' );


    if ( $query->is_search() ) {


        if ( ! $search_terms ) {

             add_action( 'wp', function () use ( $query ) {

             $query->set_404();

             status_header( 404 );

             nocache_headers();

            } );

        }


        $query->set( 'post_type', array( 'post', 'product' )  );

        $query->set( 'posts_per_page', SEARCH_GRID_COUNT_ITEMS );

    }

}


add_action( 'pre_get_posts', 'search_by_title_or_tags' );


素胚勾勒不出你
浏览 141回答 1
1回答

ABOUTYOU

我找到了解决方案。我添加了另一个钩子the_posts,它帮助我解决了问题。添加了以下代码,希望对某人有所帮助: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 );
打开App,查看更多内容
随时随地看视频慕课网APP