Вопрос или проблема
В моей пользовательской форме поиска я в настоящее время использую такие параметры $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();
Итоговые рекомендации
- Оптимизация поиска: Убедитесь, что ваш контент индексируется, так как функция поиска WordPress основывается на индексе.
- Консистентность терминов: Для большей точности используйте массив и коректные термин для тегов.
- Кэширование: Рассмотрите возможность использования кэширования результатов, чтобы улучшить производительность.
Следуя приведённым рекомендациям, вы сможете наладить эффективный поиск по заголовкам и тегам ваших постов в WordPress.