Как добавить поиск слага товаров WooCommerce в стандартный поиск WordPress

Если у вас есть сайт на 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 и сделает его более удобным для пользователей.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх