web-dev-qa-db-ja.com

製品がWoocommerceのsingle-product.phpの特定のカテゴリに属しているかどうかを確認する方法

製品が single-product.php の特定の製品カテゴリに含まれているかどうかをどのようにして確認できますか?

<?php if (is_product_category('audio')) {
           echo 'In audio';
               woocommerce_get_template_part( 'content', 'single-product' );

      } elseif (is_product_category('elektro')) {

            echo 'In elektro';
            woocommerce_get_template_part( 'content', 'single-product' );
         } else {
            echo 'some blabla'; }  ?>

is_product_category( 'slug') single-product.php には影響しません。上の条件式が欲しいのですが。単一製品ページでこれを解決する方法はありますか?

22
Alex

私はget_categories()があなたにとって最良の選択肢だとは思いません。なぜなら、それはアンカータグとしてリストされたすべてのカテゴリを含む文字列を返すためです。さて、あなたがそれをまだ持っていないなら、あなたがする必要がある最初の事は現在のページのためにproduct/postオブジェクトをつかむことです:

global $post;

それからあなたは製品の製品カテゴリ用語オブジェクト(カテゴリ)を得ることができます。ここでは、カテゴリタームオブジェクトを$categoriesという名前の単純な配列に変換しているので、どのスラッグが割り当てられているかがわかりやすくなります。現在のページのカテゴリだけでなく、商品に割り当てられた all カテゴリが返されることに注意してください。つまり、/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';
}

うまくいけば、これはあなたが探していたものであり、あなたの質問に答えます。

26
Justin Stern

この場合は 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';
}
32
Milo

各カテゴリで同じことをしたいのであれば、たくさんのelseifチェックでコードを雑然とさせるのではなく、配列を呼び出すことによってオプションのリストを調べることができます。

if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) :

// Do stuff here

else :

// Do some other stuff

endif;
7
Koshensky

これは昔のことですが、念のためまだ人々が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/

3
tiaNaturally

WC_Productクラスのget_categories()関数を使ってみましょう。

ドキュメントへのリンクは ここ にあります。

基本的にページのループ内で、商品に関連するカテゴリを返す関数を呼び出します。

0
Steve