如何解决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' );
解决方法
我找到了解决方案。我添加了另一个钩子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','elegance_fly_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 );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。