WP_Query Несколько параметров категории не работает - PullRequest
0 голосов
/ 06 марта 2019

Положение: Я не могу успешно указать параметр категории в 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,
    );

Затем я попытался объединить две переменные, и это отчасти сработало. В частности, он работал как оператор ИЛИ, фильтруя по региону или теме. Он не будет фильтровать по обоим.

$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. Я получил его на работу &&.

$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 Ответ

1 голос
/ 06 марта 2019

Ваш вопрос неопределенный, но это может помочь:

$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 );

Таким способом вы можете искать по нескольким таксономиям.Вы можете использовать в relation для указания отношения and или not.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...