#php #wordpress #search #parameters
#php #wordpress #Поиск #параметры
Вопрос:
Ситуация: я не могу успешно настроить параметр категории в WP_Query, который выполняет поиск в двух категориях, смешивая оба отношения ИЛИ и И.
Объяснение: У меня есть поиск / фильтр, который сортирует по региону, месяцу и году, и он отлично работает! При использовании category_name
параметра будет выполнен успешный поиск региона.
<?php // These grab data from the URL which are submitted by the form
$p_topi = $_GET['topic'];
$p_reg = $_GET['region'];
$p_mon = $_GET['mon'];
$p_year = (int) $_GET['yr'];
?>
<?php
$archive_args = array(
'post_type' => 'thought_leadership',
'category_name' => $p_reg, // Pay attention to this
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
$archive_query = new WP_Query($archive_args);
if ($archive_query->have_posts()) : while ($archive_query->have_posts()) : $archive_query->the_post(); ?>
Меня попросили добавить сортировку по темам. Я протестировал это, заменив используемую переменную на category_name
, и это сработало хорошо.
$archive_args = array(
'post_type' => 'thought_leadership',
'category_name' => $p_topi, // Changed the variable to topic
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
Затем я попытался объединить две переменные, и это вроде как сработало. В частности, он работал как оператор OR, фильтруя по региону или теме. Он не будет фильтроваться по обоим.
$archive_args = array(
'post_type' => 'thought_leadership',
'category_name' => "$p_topi, $p_reg", // Combined the variables
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
Затем я попытался использовать
символ, чтобы заставить параметр принимать обе переменные одновременно. Это сработало, но теперь это не будет работать как оператор OR. Другими словами, я должен выбрать тему и регион, иначе поиск не даст никаких результатов.
$archive_args = array(
'post_type' => 'thought_leadership',
'category_name' => "$p_topi $p_reg", // makes it an AND operator
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
Я исследовал WP_Query и нашел эту отличную ссылку:https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters
Я пытался category__and
, но он возвращает без сообщений, соответствующих этим критериям.
$archive_args = array(
'post_type' => 'thought_leadership',
'category__and' => array( 12, 5 ), // 12 = ID for topic, 5 = ID for region
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
Я также протестировал category__in
, но обнаружил, что он не будет отображать дочерние элементы категории. Это проблема, потому что у темы и региона есть дочерние элементы. Как category__and
это возвращает без сообщений, соответствующих этим критериям.
$archive_args = array(
'post_type' => 'thought_leadership',
'category__in' => array( 12, 5 ),
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
Как предложил @Muhammad tayyab, я попытался использовать tax_query
. Я заставил это работать на основе amp;amp; .
$archive_args = array(
'post_type' => 'thought_leadership',
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'category', // correct
'field' => 'slug', // correct
'terms' => $p_reg,
),
array(
'taxonomy' => 'category', // correct
'field' => 'slug', // correct
'terms' => $p_topi,
)
,)
);
Но я не смог успешно заставить оператор OR работать с вложенными массивами.
$archive_args = array(
'post_type' => 'thought_leadership',
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $p_reg,
),
array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $p_reg,
),
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $p_topi,
),
),
),
);
Основной вопрос:
Знаете ли вы какой-либо способ создать поиск, который будет принимать 0, 1 или 2 параметра? Другими словами, мне нужно настроить это так, чтобы мои пользователи могли искать регион и / или тему или вообще ничего.
Ответ №1:
Ваш вопрос расплывчатый, но это может помочь:
$args = array(
'post_type' => 'post',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'movie_genre',
'field' => 'slug',
'terms' => array( 'action', 'comedy' ),
),
array(
'taxonomy' => 'actor',
'field' => 'term_id',
'terms' => array( 103, 115, 206 ),
'operator' => 'NOT IN',
),
),
);
$query = new WP_Query( $args );
Таким образом, вы можете выполнять поиск по нескольким таксономиям. Вы можете использовать in relation
для указания отношения and
или not
.
Комментарии:
1. Спасибо за ваш вклад. Я переформулировал свой вопрос внизу и проверю параметр таксономии.
2. Я только что попробовал это, и я мог заставить работать оператор AND, но при использовании оператора OR и вложенности это не работало. Любая другая помощь очень ценится.