user
  • 0
Гуру

И/или Запрос категории

  • 0

У меня много проблем с использованием php query_posts(array(‘category__and’=>array(1,3))) — кажется, он вытягивает все, что находится в категории 1, независимо от того, находится ли оно также в категории 3, и я хочу только сообщения, если они существуют в обеих категориях. И, в конце концов, мне все равно нужна куча операторов ИЛИ, так есть ли лучший способ сделать это, чем query_posts?

Мне нужна страница сообщений, которые существуют в различных категориях, например:

категории 1 И 3 ИЛИ категории 1 И 5 ИЛИ категории 1 И 6

Но не категории 1 И 4

Любая помощь будет принята с благодарностью. Спасибо.

Share
  1. Странно, что использование category__and должно работать.

    Что касается следующей логики, я не думаю, что вы можете выполнить что-то сложное с параметрами запроса. Есть несколько возможных способов справиться с этим, о которых я могу думать:

    • упростить структуру категорий и/или логику выбора;
    • изменить необработанный SQL с posts_where фильтром;
    • хранить критерии выбора в метаданных поста.
    • 0
  2. Возможно, вы сможете добиться чего-то вроде того, что ищете, с tax_query аргументом.

    В вашем случае (непроверенный, еще может не сработать) что-то вроде этого будет служить для получения сообщений (в категории 1) И (в категории 3, 5 или 6) И (НЕ в категории 4):

    $tax_query = array(
            'relation' => 'AND',
        array(
            'taxonomy' => 'category',
            'terms' => array( 1 ),
        ),
        array(
            'taxonomy' => 'category',
            'terms' => array( 3, 5, 6 ),
        ),
        array(
            'taxonomy' => 'category',
            'terms' => array( 4 ),
            'operator' => "NOT IN"
        ),
    );
    
    query_posts( array( 'tax_query' => $tax_query ) );
    
    • 0
  3. Вы должны быть в состоянии сделать это, используя новые аргументы tax_query, например.

    query_posts( array(
        'tax_query' => array(
            'relation' => 'OR',
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => array('term1', 'term3'),
                'operator' => 'AND'
            ),
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => array('term1', 'term5'),
                'operator' => 'AND'
            ),
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => array('term1', 'term6'),
                'operator' => 'AND'
            )
        )
    ) );
    

    Все параметры категории/тега являются просто оболочками для tax_query, поэтому, когда вы используете category__in или любой другой из них, вы, по сути, просто используете ярлык для написания файла tax_query .

    • 0

Оставить ответ

You must login to add an answer.