Как можно сделать поиск по названиям товаров WooCommerce?
каким образом можно получить товары по названию? Я получаю все товары в категории, но мне нужен дополнительный фильтр по названии товара, как можно это сделать, подскажите пожалуйста
function get_vacancies_by_country($main_category="", $subcategory="england",$count_of_vacancies = 100){
if($subcategory==''){
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 100,
'tax_query' => array( array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $main_category,
) ),
'tax_query' => array( array(
'taxonomy' => 'product_cat',
'field' => 'name',
'terms' => '',
'compare' => 'LIKE',
) )
);
}else{
$args = array(
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $subcategory
),
),
'posts_per_page' => $count_of_vacancies,
'post_type' => 'product',
'orderby' => 'title',
);
}
$loop = new WP_Query($args);
return $loop;
}
Ответы (2 шт):
Автор решения: Valerii Vasiliev
→ Ссылка
Можно наложить дополнительный хук на post_where
function title_filter( $where, &$wp_query ) {
global $wpdb;
if ( $search_term = $wp_query->get( 'search_prod_title' ) ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( like_escape( $search_term ) ) . '%\'';
}
return $where;
}
add_filter( 'posts_where', 'title_filter', 10, 2 );
$wp_query = new WP_Query($args);
remove_filter( 'posts_where', 'title_filter', 10, 2 );
в $args добавить дополнительный параметр, по которому будет поиск по названию
$args = array(
//
'search_prod_title' => $search_prod_title
//
);
Автор решения: Darth KYL
→ Ссылка
можно добавить в аргумент ключ title если нужно 100% совпадение
если же нужно искать через like то тогда нужно использовать фильтр posts_where, например вот так
$args['_name_like'] = 'поисковый заголовок';
$loop = new WP_Query( $args );
и через фильтр добавить условие
add_filter( 'posts_where', 'add_posts_title_where', 10, 2 );
function add_posts_title_where( $where, $wp_query ) {
global $wpdb;
$post_title = $wp_query->get( '_name_like' );
if ( $post_title ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $post_title ) ) . '%\'';
}
return $where;
}