Если у вас есть сайт на WordPress с WooCommerce, то, скорее всего, вы хотите, чтобы поиск на вашем сайте работал максимально эффективно. В стандартном поиске WordPress нет поиска по слагу товаров WooCommerce, что может ограничивать пользователей в поиске нужных товаров.
В этой статье мы расскажем, как добавить поиск слага товаров WooCommerce в стандартный поиск WordPress. Мы используем фильтр posts_search
, чтобы изменить запрос и добавить условие поиска.
Для начала, откройте файл functions.php вашей темы WordPress и добавьте следующий код:
function wplife_custom_posts_search( $search, $query ) {
global $wpdb;
if ( ! is_admin() && $query->is_main_query() && $query->is_search ) {
$search_terms = $query->query_vars['s'];
$search .= " OR ({$wpdb->posts}.post_type = 'product' AND {$wpdb->posts}.post_name LIKE '%" . esc_sql( $search_terms ) . "%')";
}
return $search;
}
add_filter( 'posts_search', 'wplife_custom_posts_search', 10, 2 );
Как работает этот код? При поиске ключевых слов через стандартную форму поиска WordPress, WordPress ищет только посредством поиска текста в заголовках, описаниях и содержании страниц и постов. Для того, чтобы поиск включал в себя и поиск в слагах товаров WooCommerce, мы используем фильтр posts_search
. Этот фильтр позволяет изменить запрос, который WordPress использует для поиска.
Функция wplife_custom_posts_search
принимает два параметра: $search
и $query
. Аргумент $search
содержит текущий поисковый запрос, а $query
содержит данные запроса поиска.
Внутри функции мы проверяем, что запрос является поисковым запросом через $query->is_search
. Мы используем global $wpdb
, чтобы получить доступ к функциям базы данных WordPress. Затем мы получаем поисковые термины из запроса поиска с помощью $query->query_vars['s']
и добавляем условие поиска по слагу товаров WooCommerce в запрос.
В этом запросе мы используем $wpdb->posts
для обращения к таблице wp_posts
, которая хранит все записи на сайте. Мы добавляем условие, что post_type должен быть равен product
и слаг товаров должен содержать поисковое слово.
Вы можете изменить product
на свой тип записей, если используете другой тип записей для своих товаров WooCommerce.
Мы добавляем это условие поиска с помощью конкатенации строк: $search .=
. Мы также используем esc_sql()
для экранирования поисковых терминов, чтобы предотвратить возможные SQL-инъекции.
На последней строке функции wplife_custom_posts_search
мы возвращаем измененный запрос $search
.
Функция add_filter()
добавляет наш фильтр wplife_custom_posts_search
в стек фильтров, который будет вызываться при поиске данных на вашем сайте.
Надеемся, что этот совет поможет улучшить поиск на вашем сайте WordPress с WooCommerce и сделает его более удобным для пользователей.