WP zapytanie WooCommerce produkty, które należą do różnych wielu kategorii tylko zapytanie podatkowe

Używam WP_Query dla produktów Woocommerce w celu zapytania produktów w określonej kategorii. To jest składnia, która działała dla mnie -

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

To zwraca dane, ale chcę przekazać ID, a nie SLUG kategorii, do filtrowania i chcę znaleźć produkty, które istnieją w wielu kategoriach tylko .

Argument product_cat nie jest natywny dla WP_Query (przynajmniej to mogę znaleźć), więc zakładam, że jest to coś zwyczajowego do Woocommerce. Poprzez ich dokumentację, I nie udało mi się znaleźć niczego, co pozwoli mi filtrować według identyfikatora kategorii, ani użyć warunku AND do tego filtrowania.

Użycie cat, tablicy tax_query i category__and nie dało żadnych wyników. Zasadniczo chciałbym zapytać o wszystkie produkty, które istnieją zarówno w kategorii ID 102, jak i 115. Jeśli muszę używać ślimaków, jestem pewien, że istnieje sposób na uzyskanie tych informacji na podstawie posiadanego identyfikatora, ale chciałbym uniknąć 2 zapytań do filtrowania według wielu kategorii.

Czy ktoś wie jak to osiągnąć?

UPDATE: dowiedziałem się, że oddzielanie kategorii ślimakami przecinkami w argumencie product_cat spowoduje efekt "OR", więc połączy różne produkty z obu, ale nie tego Szukam. Na przykład:

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

Zwróci produkty z obu kategorii w sumie, ale nadal szukam sposobu, aby znaleźć różne produkty, które należą tylko do obu lub wielu kategorii.

Author: RCNeil, 2013-12-06

4 answers

Wow, więc po godzinach walenia głową, w ten sposób udało mi się to rozwiązać.]}

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

To wykorzystuje argument tax_query, w tym relation => 'AND', aby upewnić się, że produkt należy do obu kategorii.

Mam nadzieję, że to pomoże komuś w przyszłości.

Nie byłem również w stanie dowiedzieć się, jak przekazać IDENTYFIKATOR, a nie slug (chociaż jestem pewien, że jest sposób), ale oto funkcja, aby odzyskać slug na podstawie ID:

$terms = get_term($YOURID, 'product_cat'); 
$theslug = $terms->slug; 
 26
Author: RCNeil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 02:00:13

Aby odpytywać według category_ID, to mi się udało.

// 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
Author: user2718602,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-17 23:44:36

Z Kodeksu WordPress na WP_Query dla parametrów kategorii :

Odpowiednik lub

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

Odpowiednik i

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

Np.

$query = new WP_Query( $args );
 6
Author: Daniel Twork,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 18:35:15

Wewnątrz tablicy 'tax_query' można określić 'operator' do wykonania w zapytaniu. Możesz osiągnąć to, co chcesz, używając operatora '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 );

Wszystkie produkty wybrane przez to zapytanie będą zgodne z podanymi "warunkami". Zobacz ten link, aby uzyskać więcej informacji: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

W przypadku, gdy link kiedykolwiek pęknie, oto odpowiednia informacja:

Operator (string) - Operator do sprawdzenia. Możliwe wartości to "IN", "NOT IN", "and", "EXISTS" I "NOT EXISTS". Wartość domyślna to 'IN'.

 0
Author: DaPrae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-09 16:58:50