Как сделать поиск по артикулам в Вукомерс

Поисковый механизм Вукомерс игнорирует артикулы. Если посетитель захочет найти товар по его артикулу, у него ничего не выйдет. Я считаю, такое категорически недопустимо и это нужно исправить.

Проблема не новая, гуглится много каких-то дичайших решений с установкой плагинов, кучей кода и прочим. На самом деле задача решается очень просто с помощью функции wc_get_product_id_by_sku().

Нужно просто добавить небольшой фрагмент кода в файл функций активной темы (functions.php) или (правильнее) создать плагин и внедрить код туда.

add_filter( 'posts_search', 'dnln_product_search_by_sku', 9999, 2 );
  
function dnln_product_search_by_sku( $search, $wp_query ) {
   global $wpdb;
   if ( is_admin() || ! is_search() || ! isset( $wp_query->query_vars['s'] ) || ( ! is_array( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] !== "product" ) || ( is_array( $wp_query->query_vars['post_type'] ) && ! in_array( "product", $wp_query->query_vars['post_type'] ) ) ) return $search;   
   $product_id = wc_get_product_id_by_sku( $wp_query->query_vars['s'] );
   if ( ! $product_id ) return $search;
   $search = str_replace( 'AND (((', "AND (({$wpdb->posts}.ID IN (" . $product_id . ")) OR ((", $search );   
   return $search;   
}

Вот и все.

Иван Данилин
Автор Иван Данилин

Делаю сайты на Вордпресс с 2008 года, в том числе уникальные инструменты для решения сложных бизнес‑задач.

Подробнее
Комментарии
Добавить комментарий