Поиск в WordPress возвращает неправильные результаты

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

Я ограничиваю поиск в своем WP блоге только постами, добавив эту строку

<?php if (is_search() && ($post->post_type=='page')) continue; ?>

Таким образом, любые результаты с статических страниц будут исключены, что нормально, но у меня есть проблема,
если у меня есть пост, и он имеет следующее содержимое

Тест POST

 

И если я пытаюсь искать по этому ключевому слову ” post “,
это возвращает этот пост, который имеет тег видео и атрибут “poster”, что не имеет смысла.
Так как я могу исключить атрибут медиа тегов из результатов поиска.

Причина этого в том, что WordPress ищет совпадения, используя LIKE %post%, что означает, что любой пост (то есть объект Поста, Страницы или пользовательского типа поста), который содержит post в своем заголовке или содержимом, будет найден.

Вы можете изменить это поведение по умолчанию, используя posts_where хук действий.

add_action( 'posts_where', 'my_alter_search_where' );
function my_alter_search_where( $where ){

    global $wpdb;

    if (is_search()) :

        $where.= " AND $wpdb->posts.post_content NOT LIKE '%poster=%'";

    endif;

}
%post, так и %poster="% как два разных вхождения, оно не будет включено. Есть способы обойти это, но мне нужно узнать больше о вашем запросе, поэтому, если этот ответ приемлем, я бы предложил задать это как отдельный вопрос.

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

Вопрос: Поиск в WordPress возвращает неправильные результаты

Если вы столкнулись с проблемой неверных результатов поиска в вашем блоге WordPress, это связано с тем, что по умолчанию WordPress ищет совпадения, используя оператор LIKE %ключевое слово%. Это означает, что любой пост (или страница) с содержимым, содержащим искомое слово, будет найден, включая медиатеги, такие как теги <video>, что может привести к нежелательным результатам.

Решение проблемы

Для ограничения поиска только по тексту постов и исключения из результатов медиатегов и их атрибутов, вы можете использовать хук posts_where. Этот подход позволит вам адаптировать SQL-запрос, который WordPress использует для поиска.

Пример кода

Ниже приведен код, который вы можете добавить в файл functions.php вашей темы:

add_action('posts_where', 'my_alter_search_where');
function my_alter_search_where($where) {
    global $wpdb;

    if (is_search()) {
        // Исключаем посты, где содержание содержит атрибут poster
        $where .= " AND $wpdb->posts.post_content NOT LIKE '%poster=%'";
    }
    return $where;
}
Объяснение кода
  1. Добавление хука: Мы используем add_action() для привязки кода к WordPress хук posts_where, который позволяет изменять условие поиска.

  2. Проверка поиска: Условие if (is_search()) гарантирует, что изменения будут применены только во время выполнения операции поиска.

  3. Исключение результатов: Используя оператор NOT LIKE, мы исключаем посты из результатов поиска, которые содержат poster= в своем контенте.

Обратите внимание

Хотя этот метод эффективно исключает посты, где содержится атрибут poster, он также имеет ограничения. Например, если в одном и том же посте есть как искомое слово (например, "post"), так и атрибут poster=, этот пост не будет включён в результаты поиска, что может быть нежелательным.

Если у вас есть более сложные сценарии поиска, возможно, потребуется использование более сложных SQL-запросов или плагинов для поисковых функций.

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

  1. Плагины для поиска: Рассмотрите возможность использования плагинов для расширенного поиска, таких как "Relevanssi" или "SearchWP", которые обеспечивают более гибкие и точные методы поиска, включая возможность настройки индексации и исключений.

  2. Фильтрация содержимого: Проверьте, могут ли регулярные выражения или другие способы фильтрации разрешить ваши вопросы, если у вас есть специфические требования к поисковому запросу.

Заключение

Корректировка поведения поиска в WordPress может значительно улучшить опыт пользователей и повысить релевантность результатов. Применяя описанные решения, вы сможете более точно контролировать, какие результаты выводятся по вашему запросу, тем самым избегая нежелательных совпадений с атрибутами медиаэлементов. Удачи в улучшении вашего блога!

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

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