WP Query produits Woocommerce qui appartiennent à des catégories multiples distinctes seulement requête fiscale

j'utilise WP_Query pour les produits Woocommerce dans la tentative d'interroger des produits dans une catégorie particulière. C'est la syntaxe qui a fonctionné pour moi -

$args = array(
    'posts_per_page' => -1,
    'product_cat' => 'category-slug-here',
    'post_type' => 'product',
    'orderby' => 'title',
);
$the_query = new WP_Query( $args );
// The Loop
while ( $the_query->have_posts() ) {
    $the_query->the_post();
    echo '' . get_the_title() . '<br /><br />';
}
wp_reset_postdata();

cela renvoie des données, mais je veux passer un ID, pas une catégorie slug, pour filtrer et je veux trouver des produits qui existent dans plusieurs catégories .

L'argument product_cat n'est pas natif WP_Query (au moins que je peux trouver), donc je suppose que c'est quelque chose de personnalisé à Woocommerce. Grâce à leur documentation, Je n'ai pas pu trouver quoi que ce soit qui me permette de filtrer par ID de catégorie, ni d'utiliser un et condition pour ce filtrage.

en utilisant cat, le tableau de tax_query et category__and n'ont donné aucun résultat. Essentiellement, je voudrais interroger tous les produits qui existent dans les deux catégories ID 102, et 115. Si je dois utiliser slugs, je suis sûr qu'il y a un moyen d'obtenir cette information basée sur L'ID que j'ai, mais je voudrais éviter 2 requêtes à filtrer par plusieurs catégories.

est ce que quelqu'un sait comment faire cela?

mise à jour: j'ai appris que la séparation des limaces de la catégorie par des virgules dans le product_cat l'argument va produire un effet" ou", donc il va combiner des produits distincts des deux, mais ce n'est pas ce que je cherche. Ainsi, par exemple:

 'product_cat' => 'category-slug1, category-slug2'

retournera les produits des deux catégories au total, mais je suis toujours à la recherche d'un moyen de trouver des produits distincts qui appartiennent seulement pour les deux, ou plusieurs, catégories.

11
demandé sur RCNeil 2013-12-06 02:07:30

4 réponses

Wow, donc après des heures de cogner ma tête, c'est comment j'ai pu résoudre ce -

$args = array(
    'posts_per_page' => -1,
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => 'category-slug1'
        ),
        array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => 'category-slug2'
        )
    ),
    'post_type' => 'product',
    'orderby' => 'title',
);
$the_query = new WP_Query( $args );

ceci profite de la tax_query argument, y compris le relation => 'AND' pour s'assurer que le produit entre dans les deux catégories.

J'espère que cela aidera quelqu'un dans le futur.

Je n'ai pas non plus été capable de trouver comment passer un ID, plutôt qu'un slug (bien que je suis sûr qu'il y a un moyen), mais voici la fonction pour récupérer le slug basé sur un ID:

$terms = get_term($YOURID, 'product_cat'); 
$theslug = $terms->slug; 
26
répondu RCNeil 2013-12-08 02:00:13

Pour la requête par category_ID c'est ce qui a fonctionné pour moi.

// First obtain term id:
//...
$all_categories = get_categories( $args );
$cat_ids = array();

foreach ($all_categories as $cat) 
{
     array_push($cat_ids, $cat->term_id);
}

//Now use ids from array:
$args = array(
    'posts_per_page' => -1,
    'post_type' => 'product',
    'tax_query'     => array(
        array(
            'taxonomy'  => 'product_cat',
            'field'     => 'id', 
            'terms'     => $cat_ids
        )
    )
);
10
répondu user2718602 2014-08-17 23:44:36

dans le codex WordPress sur WP_Query pour les paramètres de catégorie:

l'équivalent de OR

$args = array( 'product_cat' => 'category-slug1,category-slug2' ) );

l'équivalent de et

$args = array( 'product_cat' => 'category-slug1+category-slug2' );

e.g.

$query = new WP_Query( $args );
6
répondu Daniel Twork 2016-01-28 18:35:15

dans le tableau d'un tableau' tax_query', vous pouvez spécifier un' opérateur ' à effectuer sur la requête. Vous pouvez obtenir ce que vous voulez en utilisant l'opérateur 'AND'.

$args = array(
'posts_per_page' => -1,
'tax_query' => array(
    'relation' => 'AND',
    array(
        'taxonomy' => 'product_cat',
        'field' => 'slug',
        'terms' => array( 'category-slug1', 'category-slug2' )
        'operator => 'AND',
    ),
),
'post_type' => 'product',
'orderby' => 'title',
);
$the_query = new WP_Query( $args );

tous les produits sélectionnés par cette requête correspondront aux 'termes'fournis. Voir ce lien pour plus d'informations:https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Dans le cas où le lien tombe, voici les informations pertinentes:

opérateur (string) - opérateur à tester. Les valeurs possibles sont "IN", "NOT IN", "and", "EXISTS" et "NOT EXISTS". La valeur par défaut est "DANS".

0
répondu DaPrae 2017-05-09 16:58:50