特定のカテゴリIDの製品リストを取得します
-
-
`category`または`product_category`?`category` or `product_category`?
- 1
- 2014-05-14
- fuxia
-
4 回答
- 投票
-
- 2014-06-02
主な問題は、
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);
ここでは、表示されている商品のみを1ページに12個返品しています.
I suspect the main problem is that you should be using the
WP_Query
object rather thanget_posts()
. The later by default only returns items with a post_type ofpost
not products,So given a category with ID 26, the following code would return it's products (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);
In earlier versions of WooCommerce the visibility was stored as a meta field, so the code would be:
$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);
Here we are only returning visible products, 12 per page.
Have a look through http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters for more details about how the category targeting works - it's often more useful to retrieve it by slug than by ID!
-
ソリューションは機能しました.いい説明.Solution worked. Nice explanation.
- 0
- 2015-07-10
- Kamesh Jungi
-
Woocommerce 3以降、可視性はメタではなく分類に変更されているため、meta_queryをtax_queryに変更する必要があります.https://wordpress.stackexchange.com/a/262628/37355を参照してください.As of Woocommerce 3, visibility is changed to taxonomy instead of meta so you need to change the meta_query to tax_query. See https://wordpress.stackexchange.com/a/262628/37355.
- 1
- 2017-10-18
- jarnoan
-
`get_posts()`についてのあなたの結論は間違っています.コード内で `new WP_Query($ args)`を `get_posts($ args)`に置き換えることができ、それは機能します.Your conclusion about `get_posts()` is wrong. You can replace `new WP_Query($args)` with `get_posts($args)` in your code and it will work.
- 0
- 2018-07-14
- Bjorn
-
-
OPは特にカテゴリーIDを使用して製品を入手するように求めましたが、これは私を助けてくれたので、とにかく賛成します.元の質問には答えられないことに注意してくださいOP specifically asked for getting products using a category ID, however, this helped me, so I'll upvote anyhow. Just be aware it doesn't answer the original question
- 1
- 2019-09-24
- dKen
-
-
- 2015-01-19
カテゴリ(category-slug-name)をID、名前、またはスラッグで変更する
<?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(); ?>
change category (category-slug-name) by id or name or slug
<?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(); ?>
-
- 2016-11-18
少し遅れていますが、物事を明確にし、より明確な答えを提供したいと思います.ユーザー@benz001が有効な回答をした可能性がありますが、何か間違っていると言いました.
get_posts
は、WP_Queryと同様に、デフォルトで
. 2つの本当の違いはposts
ポストタイプのあらゆる種類のポストタイプを返します.ここで見事に説明されています. 実際のところ、OPは
$ args
配列にいくつかのパラメーターが欠落しているだけです.-
彼が探している投稿タイプの定義:
'post_type'=&gt; '製品'、
-
そして、検索クエリの「分類法の部分」の変更:
'tax_query'=&gt;アレイ( アレイ( '分類'=&gt; 'product_cat'、 '用語'=&gt; 26、 '演算子'=&gt; 'に'、 ) )
このようにして次の行
$products=new WP_Query($ args); var_dump($products);
必要な製品が表示されます:)
@benz001で示される他のすべての追加パラメーターはもちろん有効ですが、OPから要求されていないため、この回答ではそれらを残すことにしました.
A bit late, but would like to clarify things and provide a cleaner answer. User @benz001 gave a possible valid answer, but said something wrong:
get_posts
returns any kind of post-types, defaulting toposts
post-type, just likeWP_Query
. The real differences between the two are wonderfully explained HERE.The fact is, the OP was simply missing some parameters into the
$args
array:The definition of the post-type he is searching for:
'post_type' => 'product',
And the modification of the "taxonomy part" of the search query:
'tax_query' => array( array( 'taxonomy' => 'product_cat', 'terms' => 26, 'operator' => 'IN', ) )
This way your next lines
$products = new WP_Query($args); var_dump($products);
Will show you the needed products :)
All other additional parameters shown by @benz001 are of course valid but not requested by the OP, so I decided to leave them behind in this answer.
特定のカテゴリID(カテゴリ名ではない)のすべての製品のリストを取得する正しい方法が見つかりませんでした.
カテゴリリストを取得するために使用しているコードは次のとおりです.正常に機能します:
しかし、特定のカテゴリID(たとえば47)については、関連する製品を入手する方法が見つかりませんでした.私は次の方法を試しました:
$products
配列をデバッグすると、常に0が返されます.これは、ID 47のカテゴリにいくつかの製品があることがわかっているため、間違っています.コードを修正する方法はありますか?