У меня есть сайт: https://lifesourcebookshop.co.uk/, на котором Я хочу изменить поиск продуктов WooCommerce.
Чего я хочу: Изменить запрос формы поиска WooCommerce (в интерфейсе) для отображения продуктов по поиск по названию, описанию, product_tag и пользовательской таксономии под названием book_author продуктов.
Что у меня есть: Я попробовал использовать этот код, вдохновленный этим ответом, который возвращает результаты по названию и описанию продукта. Но если я выполняю поиск по именам тегов или автору книги, результаты будут неверными.
Как воспроизвести эту проблему (поместите приведенный ниже код в файл function.php) вашей активной темы):
Код: Выделить всё
add_filter('posts_search', 'woocommerce_search_product_tag_extended', 999, 2);
function woocommerce_search_product_tag_extended($search, $query) {
global $wpdb, $wp;
$qvars = $wp->query_vars;
if (is_admin() || empty($search) || !(isset($qvars['s']) && isset($qvars['post_type']) && !empty($qvars['s']) && $qvars['post_type'] === 'product')) {
return $search;
}
$taxonomies = array('product_tag', 'book_author');
$tax_query = array('relation' => 'OR');
foreach($taxonomies as $taxonomy) {
$tax_query[] = array(
'taxonomy' => $taxonomy,
'field' => 'name',
'terms' => esc_attr($qvars['s']),
);
}
$ids = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'product',
'post_status' => 'publish',
'fields' => 'ids',
'tax_query' => $tax_query,
));
if (sizeof($ids) > 0) {
$search = str_replace('AND (((', "AND ((({$wpdb->posts}.ID IN (" . implode( ',', $ids ) . ")) OR (", $search);
}
return $search;
}
Я' Надеюсь, вы сможете помочь.
Спасибо,
Роб
Подробнее здесь: https://stackoverflow.com/questions/790 ... uct-search