特定のカテゴリIDの製品リストを取得します


14

特定のカテゴリID(カテゴリ名ではない)のすべての製品のリストを取得する正しい方法が見つかりませんでした。

カテゴリリストを取得するために使用しているコードは次のとおりで、正常に機能します。

$args = array(
           'orderby'    => $orderby,
           'order'      => $order,
           'hide_empty' => 0,
           'include'    => $ids,
           'parent'    => 0,
     ); 

$categories = get_terms( 'product_cat', $args );

ただし、特定のカテゴリID(47など)については、関連する製品を入手する方法が見つかりませんでした。私は次の方法を試しました:

$args = array( 
    'posts_per_page' => 5,
    'offset'=> 1,
    'category' => 47
 );

$products = get_posts( $args );
echo var_dump($products);

$products配列のデバッグでは常に0が返されますが、ID 47のカテゴリにいくつかの製品があることがわかっているので間違っています。コードを修正する方法はありますか?


1
categoryまたはproduct_category
FUXIA

回答:


19

私は主な問題はあなたがWP_Queryオブジェクトではなくオブジェクトを使用する必要があることだと思うget_posts()。後者はデフォルトではpost_typeが商品ではpostないアイテムのみを返しますが、

したがって、ID 26のカテゴリを指定すると、次のコードはその製品(WooCommerce 3+)を返します。

    $args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'posts_per_page'        => '12',
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field' => 'term_id', //This is optional, as it defaults to 'term_id'
            'terms'         => 26,
            'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
        ),
        array(
            'taxonomy'      => 'product_visibility',
            'field'         => 'slug',
            'terms'         => 'exclude-from-catalog', // Possibly 'exclude-from-search' too
            'operator'      => 'NOT IN'
        )
    )
);
$products = new WP_Query($args);
var_dump($products);

WooCommerceの以前のバージョンでは、可視性はメタフィールドとして保存されていたため、コードは次のようになります。

    $args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'posts_per_page'        => '12',
    'meta_query'            => array(
        array(
            'key'           => '_visibility',
            'value'         => array('catalog', 'visible'),
            'compare'       => 'IN'
        )
    ),
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field' => 'term_id', //This is optional, as it defaults to 'term_id'
            'terms'         => 26,
            'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
        )
    )
);
$products = new WP_Query($args);
var_dump($products);

ここでは、ページあたり12個の表示可能な製品のみを返します。

カテゴリターゲティングの仕組みの詳細については、http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parametersをご覧ください。IDよりもスラッグで取得する方が便利なことがよくあります。


解決した。いい説明。
カメシュジュンギ

1
Woocommerce 3では、可視性がメタではなく分類に変更されているため、meta_queryをtax_queryに変更する必要があります。wordpress.stackexchange.com/a/262628/37355を参照してください。
ジャーノアン

についてのあなたの結論get_posts()は間違っています。コード内でで置き換えることができnew WP_Query($args)、動作get_posts($args)します。
ビヨン

2

IDまたは名前またはスラッグでカテゴリ(category-slug-name)を変更します

<?php

$args = array( 'post_type' => 'product', 'stock' => 1, 'posts_per_page' => 2,'product_cat' => 'category-slug-name', 'orderby' =>'date','order' => 'ASC' );
  $loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product; 
?>
Within loop we can fetch Product image, title, description, price etc. 

<?phpendwhile;wp_reset_query(); ?>

2

少し遅れましたが、物事を明確にし、より明確な答えを提供したいと思います。benz001 @ユーザーは、可能な有効な回答を与えたが、何かが間違っは言った:get_postsする不履行、ポストタイプのいずれかの種類を返すpostsだけのような形を投稿しますWP_Query。2つの間の実際の違いは、ここで見事に説明されています。

事実、OPには$args配列にいくつかのパラメーターが欠落しているだけです。

  • 彼が探している投稿タイプの定義:

        'post_type'             => 'product',
  • 検索クエリの「分類部分」の変更:

        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'terms' => 26,
                'operator' => 'IN',
            )
        )

このようにあなたの次の行

$products = new WP_Query($args);
var_dump($products);

必要な製品が表示されます:)

@ benz001で示される他のすべての追加パラメーターはもちろん有効ですが、OPから要求されていないため、この回答ではそれらを残すことにしました。


2
$products = wc_get_products(array(
    'category' => array('your-category-slug'),
));

OPは、カテゴリIDを使用して製品を取得するように具体的に要求しましたが、これは私を助けてくれました。元の質問
-dKen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.