Woocommerceのsingle-product.phpで商品が特定のカテゴリにあるかどうかを確認するにはどうすればよいですか?
-
-
最初のステートメントに終了 `)`がないことが原因である可能性がありますか?`if(is_product_category( 'audio'))`である必要がありますMight be because your first statement is missing a closing `)`? It should be `if (is_product_category('audio'))`
- 0
- 2012-12-12
- stealthyninja
-
良いキャッチですが、それだけではありません.is_product_categoryはsingle-product.phpでは機能しないようですGood catch, but that's not it. is_product_category doesn't seem to work on single-product.php
- 0
- 2012-12-12
- Alex
-
5 回答
- 投票
-
- 2012-12-18
get_categories()
は、アンカータグとしてリストされているすべてのカテゴリを含む文字列を返すため、この場合は最適なオプションではないと思います.表示には適していますが、計算には適していません.カテゴリが何であるかをコードで出力します.さて、最初に行う必要があるのは、現在のページの製品/投稿オブジェクトをまだ持っていない場合はそれを取得することです.global $post;
次に、製品の製品カテゴリ用語オブジェクト(カテゴリ)を取得できます.ここでは、カテゴリ用語オブジェクトを
$categories
という名前の単純な配列に変換しているので、どのスラッグが割り当てられているかを簡単に確認できます.これにより、現在のページの1つだけでなく、製品に割り当てられたすべてのカテゴリが返されることに注意してください.つまり、/shop/audio/funzo/
にいる場合:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
次に、カテゴリがリストに含まれているかどうかを確認する必要があります.
if ( in_array( 'audio', $categories ) ) { // do something
すべてをまとめる:
<?php global $post; $terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug; if ( in_array( 'audio', $categories ) ) { echo 'In audio'; woocommerce_get_template_part( 'content', 'single-product' ); } elseif ( in_array( 'elektro', $categories ) ) { echo 'In elektro'; woocommerce_get_template_part( 'content', 'single-product' ); } else { echo 'some blabla'; }
うまくいけば、これがあなたが探していたものであり、あなたの質問に答えます.
I don't think
get_categories()
is the best option for you in this case because it returns a string with all the categories listed as anchor tags, fine for displaying, but not great for figuring out in code what the categories are. Ok, so the first thing you need to do is grab the product/post object for the current page if you don't already have it:global $post;
Then you can get the product category term objects (the categories) for the product. Here I'm turning the category term objects into a simple array named
$categories
so it's easier to see what slugs are assigned. Note that this will return all categories assigned to the product, not just the one of the current page, ie if we're on/shop/audio/funzo/
:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Then we just have to check whether a category is in the list:
if ( in_array( 'audio', $categories ) ) { // do something
Putting it all together:
<?php global $post; $terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug; if ( in_array( 'audio', $categories ) ) { echo 'In audio'; woocommerce_get_template_part( 'content', 'single-product' ); } elseif ( in_array( 'elektro', $categories ) ) { echo 'In elektro'; woocommerce_get_template_part( 'content', 'single-product' ); } else { echo 'some blabla'; }
Hopefully this is what you were looking for and answers your question.
-
- 2012-12-18
この場合、has_term
が機能するはずです:if ( has_term( 'audio', 'product_cat' ) ) { echo 'In audio'; woocommerce_get_template_part( 'content', 'single-product' ); } elseif ( has_term( 'elektro', 'product_cat' ) ) { echo 'In elektro'; woocommerce_get_template_part( 'content', 'single-product' ); } else { echo 'some blabla'; }
has_term
should work in this case:if ( has_term( 'audio', 'product_cat' ) ) { echo 'In audio'; woocommerce_get_template_part( 'content', 'single-product' ); } elseif ( has_term( 'elektro', 'product_cat' ) ) { echo 'In elektro'; woocommerce_get_template_part( 'content', 'single-product' ); } else { echo 'some blabla'; }
-
- 2015-02-18
各カテゴリで同じことをしたい場合は、elseifチェックをたくさん使ってコードを乱雑にするのではなく、配列を呼び出すことでオプションのリストを確認できることに注意してください.
>if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) : // Do stuff here else : // Do some other stuff endif;
It's worth noting that you can go through a list of options by calling an array rather than having to clutter up your code with lots of elseif checks, assuming you want to do the same thing with each category that is.
if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) : // Do stuff here else : // Do some other stuff endif;
-
この答えは、編集として、ミロの答えに追加されるべきだと思います.I think this answer should be added, as edittion, to Milo's answer.
- 0
- 2015-02-18
- cybmeta
-
- 2016-06-09
これは古いですが、人々がまだWooThemesを単純な解決策として探している場合に備えて:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
*「your_category」を使用しているものに変更します.
ドキュメントへのリンクは次のとおりです: https://docs.woothemes.com/document/remov-product-content-based-on-category/
This is old but just in case people are still looking WooThemes as a simple solution:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
*Change 'your_category' to whatever you are using.
Here is the link to the documentation: https://docs.woothemes.com/document/remov-product-content-based-on-category/
-
- 2012-12-12
WC_Productクラスの
get_categories()
関数の使用を検討します.ドキュメントへのリンクは
ここにあります.p> 基本的に、ページのループ内で関数を呼び出して、製品に関連付けられているカテゴリを返します.
I'd look at using the
get_categories()
function of the WC_Product class.You can find the link to the documentation here.
Basically within the loop of the page call the function to return the categories associated with the product.
-
これをコーディングすることはできません.これを機能させる方法がわかりません.誰かがこれを説明してください.私はそこで最善を尽くしました.これをget_categories()に置き換える必要がありますか?I am not able to code this. I don't have a clue how to get this to work. Somebody please illustrate this. I tried my best up there. Should I replace this with get_categories()?
- 0
- 2012-12-13
- Alex
-
@Alexis_product_category()関数は、製品カテゴリページを表示している場合にTRUEを返します.製品のカテゴリーではありません.私は今プロジェクトに向かっていますが、後でコードスニペットを取得しようとします.@Alex the is_product_category() function returns TRUE if you're on the product category page. Not the category of the product. I'm heads down on a project right now, but I'll try to get you a code snippet later.
- 0
- 2012-12-13
- Steve
-
この小さなスニペットのコーディングに時間を割いてくれてありがとう、スティーブン.とても感謝しています.Thanks, Steven for taking time to code this little snippet. Appreciate it very much.
- 0
- 2012-12-13
- Alex
世界で、商品が single-product.php の特定の商品カテゴリに含まれているかどうかを確認するにはどうすればよいですか?
is_product_category( 'slug')は single-product.php に影響を与えません.上位の条件文が欲しいのですが.単一の製品ページでこれを解決する方法はありますか?