Как искать по “названию поста” и “меткам” с помощью WP_Query?

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

В моей пользовательской форме поиска я в настоящее время использую такие параметры $args с моим WP Query:

$args = array(

    'post_type'   => 'post',
    'posts_per_page'  => $postsPerPage,
    'offset'          => $postOffset,
    'category'        => 42,
    's'               => $name, //значение моего поискового запроса
    'orderby'         => 'date',
    'order'           => 'DESC',

);

Я хотел бы искать пост по “названию” ИЛИ по “тегу”.

Я попробовал использовать этот код:

$query_args = array(

'post_type' => 'post',

'post_status' => 'publish',

'order' => 'ASC',

'orderby' => 'none',

'posts_per_page' => '100',

'offset' => '2',

'page' => '2',

'tax_query' => array(

    '0' => array(

        'taxonomy' => 'post_tag',

        'field' => 'name',

        'terms' => array('test'),

        'operator' => 'IN',

    ),

    'relation' => 'OR',

),

'meta_query' => array(

    '0' => array(

        'key' => 'post_title',

        'value' => 'test',

        'compare' => 'LIKE',

    ),

    'relation' => 'OR',

),

но результат пустой.

Спасибо!

Попробуйте избавиться от ключа “0” в вашем массиве tax_query и meta_query.

$query_args = array(

    'post_type' => 'post',

    'post_status' => 'publish',

    'order' => 'ASC',

    'orderby' => 'none',

    'posts_per_page' => '100',

    'offset' => '2',

    'page' => '2',

    'tax_query' => array(

        array(

            'taxonomy' => 'post_tag',

            'field' => 'name',

            'terms' => array('test'),

            'operator' => 'IN',

        ),

        'relation' => 'OR',

    ),

    'meta_query' => array(

        array(

            'key' => 'post_title',

            'value' => 'test',

            'compare' => 'LIKE',

        ),

        'relation' => 'OR',

    ),

Также в вашем первом наборе параметров у вас есть 'category' => 42, но это должно быть 'cat' => 42,

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

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

Шаг 1: Параметры WP_Query

Ваша исходная настройка аргументов выглядит следующим образом:

$args = array(
    'post_type'      => 'post',
    'posts_per_page' => $postsPerPage,
    'offset'         => $postOffset,
    'cat'            => 42, // Изменено с 'category' на 'cat'
    's'              => $name, // Значение вашего поискового термина
    'orderby'        => 'date',
    'order'          => 'DESC',
);

Однако если вы хотите осуществить поиск одновременно по заголовкам и тегам, следует использовать tax_query для тегов и meta_query для заголовков. Обратите внимание, что meta_query используется для пользовательских полей, а заголовок поста не является пользовательским полем, поэтому мы воспользуемся параметром ‘s’ для поиска по заголовку.

Шаг 2: Корректировка Аргументов

Примените следующие настройки для вашего запроса:

$query_args = array(
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'order'          => 'ASC',
    'orderby'        => 'none',
    'posts_per_page' => 100,
    'offset'         => 2,
    'tax_query'      => array(
        array(
            'taxonomy' => 'post_tag',
            'field'    => 'name',
            'terms'    => 'test', // Укажите нужный тег
            'operator' => 'IN',
        ),
    ),
    's'              => 'test', // Используйте 's' для поиска по заголовку
);

Шаг 3: Соединение Тегов и Заголовков

Если вы хотите выполнить поиск по заголовку или тегу (логическое ИЛИ), достаточно просто использовать параметр 's' вместе с tax_query. Он будет автоматически искать по заголовкам и содержимому поста:

$query_args = array(
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'order'          => 'ASC',
    'orderby'        => 'none',
    'posts_per_page' => 100,
    'offset'         => 2,
    'tax_query'      => array(
        array(
            'taxonomy' => 'post_tag',
            'field'    => 'name',
            'terms'    => 'test', // Тег для поиска
            'operator' => 'IN',
        ),
    ),
    's'              => 'test', // Заголовок или содержимое
);

Шаг 4: Проверка Результатов

После выполнения запроса, вам следует проверить, были ли найдены нужные посты:

$query = new WP_Query($query_args);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        // Отображение поста.
    }
} else {
    // Сообщение о том, что посты не найдены.
}
wp_reset_postdata();

Итоговые рекомендации

  1. Оптимизация поиска: Убедитесь, что ваш контент индексируется, так как функция поиска WordPress основывается на индексе.
  2. Консистентность терминов: Для большей точности используйте массив и коректные термин для тегов.
  3. Кэширование: Рассмотрите возможность использования кэширования результатов, чтобы улучшить производительность.

Следуя приведённым рекомендациям, вы сможете наладить эффективный поиск по заголовкам и тегам ваших постов в WordPress.

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

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