@VampireFang

Как сделать поиск по меткам товаров Woocommerce?

Здравствуйте! Подскажите, пожалуйста, решением реализацию поиска по меткам товаров в Woocommerce. Есть автомобильные запчасти, у которых есть свой номер, но бывает, что они одинаковые. В каждом товаре я добавляю метки. Как сделать, чтобы поиск происходил только по меткам( не по названиям, атрибутам и т.д.) и чтобы результаты выводились не открытием страницы конкретного товара, а привычной таблицей товаров?
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 1
gogowq
@gogowq
Ozh domosh acha ozh
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 );


Источник
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы