web-dev-qa-db-fra.com

Requête fiscale avancée

Ci-dessous ma requête fiscale, pour le moment, elle renvoie tous les articles qui ont au moins un des termes spécifiés.

Existe-t-il un moyen de ne pouvoir renvoyer que les messages contenant TOUS des termes spécifiés?

[tax_query] => Array
    (
        [relation] => AND
        [0] => Array
            (
                [taxonomy] => services
                [field] => term_id
                [terms] => Array
                    (
                        [0] => 3
                        [1] => 10
                        [2] => 6
                        [3] => 9
                    )

                [operator] => IN
            )

        [1] => Array
            (
                [taxonomy] => awards
                [field] => term_id
                [terms] => Array
                    (
                        [0] => 13
                        [1] => 12
                    )

                [operator] => IN
            )

    )
2
Frank Martin

Essayez [operator] => AND dans les deux sous-tableaux. Je pense que cela fonctionnera à partir de ma lecture de WP_Tax_Query::get_sql().

7
Chris Carson

Alternativement, vous pouvez diviser les deux requêtes en cinq (en fonction de la manière dont vous obtenez vos conditions, il pourrait même être plus facile à coder).

Il serait intéressant de savoir s’il existe une différence de performance entre les deux constructions. (@ Frank Martin, ou qui que ce soit d'autre, ce serait bien si vous pouviez partager le code SQL réel généré de chaque manière - je définis cette réponse comme un wiki de communauté.)

[tax_query] => Array
(
    [relation] => AND
    [0] => Array
        (
            [taxonomy] => services
            [field] => term_id
            [terms] => Array
                (
                    [0] => 3
                )

            [operator] => IN
        )
    [1] => Array
        (
            [taxonomy] => services
            [field] => term_id
            [terms] => Array
                (
                    [0] => 10
                )

            [operator] => IN
        )
    [2] => Array
        (
            [taxonomy] => services
            [field] => term_id
            [terms] => Array
                (
                    [0] => 6
                )

            [operator] => IN
        )
    [3] => Array
        (
            [taxonomy] => services
            [field] => term_id
            [terms] => Array
                (
                    [0] => 9
                )

            [operator] => IN
        )

    [4] => Array
        (
            [taxonomy] => awards
            [field] => term_id
            [terms] => Array
                (
                    [0] => 13
                )

            [operator] => IN
        )
    [5] => Array
        (
            [taxonomy] => awards
            [field] => term_id
            [terms] => Array
                (
                    [0] => 12
                )

            [operator] => IN
        )

)

.

Comme je l'ai découvert lors de ma récente question sur la taxonomie avancée, Comment transmettre des paramètres d'URL pour les requêtes de taxonomie avancées avec plusieurs termes pour une taxonomie personnalisée WP fera exactement cela (au moins sous 3.1.4) si vous passez la requête via l'URL.

0
marfarma