Поиск: как расширить существующий поиск, чтобы включить пользовательскую таблицу.

Вопрос или проблема

Я создал пользовательскую таблицу ‘products’ с полями: название, описание, URL. Элементы, хранящиеся в таблице, импортируются.

Я хотел бы расширить поиск в WordPress до этой таблицы. Это возможно?

По умолчанию WordPress ищет по ключевым словам. Это означает, что при передаче поискового запроса “Loren Ipsum”
WordPress строит следующее для условия WHERE:

((wp_posts.post_title LIKE '%Loren%') OR
(wp_posts.post_content LIKE '%Loren%')) 
AND
((wp_posts.post_title LIKE '%Ipsum%') OR
(wp_posts.post_content LIKE '%Ipsum%'))

Этот ответ может быть полезен!
Существует также плагин для этого: Search Everything

Зависит от того, как вы хотите это сделать. Я в настоящее время создаю сайт с пользовательским поиском. Я сделал это в несколько шагов.

  • Подумайте о предпочтительном URL: www.example.com/search/< название_продукта >
  • Создайте шаблон WordPress для вашего пользовательского поиска.
  • Добавьте страницу с соответствующим шаблоном. Обратите внимание на ID страницы.
  • Добавьте необходимые теги перезаписи для этого. Вы будете использовать их позже в вашем шаблоне поиска:

    add_action('init','custom_rewrite_tags');
    
    function custom_rewrite_tags() {
        add_rewrite_tag('%var%','([^&]+)');
    }
    
  • Теперь вы можете создать свою перезапись, чтобы поиск был хорошим URL, как вам нравится:

    add_action('admin_init','action_custom_rewrite_rules');
    function action_custom_rewrite_rules() {
        add_rewrite_rule('^search/([^&]+)/?$','index.php?page_id=< ID страницы >&var=$matches[1]','top'); 
    }
    

    Добавленное правило перезаписи указывает регулярное выражение для соответствия URL, и соответствующий запрос, который будет отправлен в index.php. Захваты регулярного выражения запоминаются в переменной $matches, начиная с индекса 1 – первой захваченной группы. В данном случае это будет www.example.com/search/< здесь >/ . Мы присваиваем захваты вашим пользовательским тегам перезаписи.

  • Теперь в вашем шаблоне поиска вы можете запустить функцию, и она получит доступ к тегам перезаписи. Пример вернет вашу переменную. Если вам не нравятся красивые URL, вы всегда можете поискать с помощью get_query:

    /*
     * Имя шаблона: Шаблон пользовательского поиска
     */
    $var = get_query_var('var');
    
  • А теперь запрос:

    $sql = $wpdb->prepare("SELECT * FROM myTable WHERE var = %s",
        $var);
    $results = $wpdb->get_results($sql);
    

И в результатах у вас есть ваши результаты, делайте с ними все, что хотите.

Ответ или решение

Чтобы расширить стандартную поисковую систему WordPress и включить в неё вашу пользовательскую таблицу «products», вам нужно выполнить несколько шагов. Вот пошаговое руководство:

Шаг 1: Создание пользовательского шаблона поиска

  1. Создайте новую страницу для поиска с соответствующим шаблоном, который вы будете использовать для отображения результатов. Вы можете назвать его, например, custom-search.php и добавить код следующего содержания:

    <?php
    /*
    Template Name: Custom Search Template
    */
    get_header();
    
    // Получение поискового запроса
    $search_query = get_query_var('search_term');
    
    // Выполнение запроса к вашей таблице
    global $wpdb;
    $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM products WHERE title LIKE %s OR description LIKE %s", 
       '%' . $wpdb->esc_like($search_query) . '%', 
       '%' . $wpdb->esc_like($search_query) . '%'));
    
    foreach($results as $product) {
       echo '<h2>' . esc_html($product->title) . '</h2>';
       echo '<p>' . esc_html($product->description) . '</p>';
       echo '<a href="' . esc_url($product->url) . '">Перейти к продукту</a>';
    }
    
    get_footer();

Шаг 2: Добавление переопределений URL

  1. Добавьте правила переопределения URL в файл functions.php вашей темы. Это нужно для того, чтобы создать «чистый» URL для поиска.

    add_action('init', 'custom_rewrite_tags');
    
    function custom_rewrite_tags() {
       add_rewrite_tag('%search_term%', '([^&]+)');
    }
    
    add_action('admin_init', 'action_custom_rewrite_rules');
    function action_custom_rewrite_rules() {
       add_rewrite_rule('^search/([^/]+)/?$', 'index.php?pagename=your-search-page-slug&search_term=$matches[1]', 'top');
    }

    Не забудьте заменить your-search-page-slug на слаг вашей страницы поиска.

  2. Сохраните постоянные ссылки после добавления нового правила, перейдя в «Настройки» → «Постоянные ссылки» и нажав «Сохранить изменения».

Шаг 3: Реализация пользовательского поиска

  1. Создайте пользовательскую форму поиска, если она вам нужна. Вы можете использовать следующий код для создания формы:

    <form action="<?php echo home_url('/search/'); ?>" method="get">
       <input type="text" name="search_term" placeholder="Искать продукты...">
       <input type="submit" value="Поиск">
    </form>

Шаг 4: Рассмотрение результатов поиска

  1. В вашем custom-search.php можно обрабатывать результаты, как показано в шаге 1. Можно добавить дополнительные функции для форматирования или фильтрации результатов.

Альтернативные решения

Если вам не хочется заниматься кодом, вы можете рассмотреть использование плагинов, таких как Search Everything. Этот плагин расширяет стандартный функционал поиска WordPress, но могут быть ограничения касательно поиска в пользовательских таблицах.

Заключение

Теперь ваш поиск должен учитывать данные из пользовательской таблицы «products». Если у вас есть дополнительные вопросы или вы столкнетесь с трудностями, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...