Woocommerceのsingle-product.phpで製品が特定のカテゴリにあるかどうかを確認するにはどうすればよいですか?


25

製品が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には影響しません。上位の条件が必要です。単一の製品ページでこれを解決する方法はありますか?


あなたの最初の声明に終止符が欠けているから)でしょうか?それはif (is_product_category('audio'))
stealthyninja

良いキャッチですが、そうではありません。is_product_categoryは、シングルproduct.phpに動作するようには思えない
アレックス

回答:


28

get_categories()この場合、アンカータグとしてリストされているすべてのカテゴリを含む文字列を返すため、最適な選択肢ではないと思いますが、表示には適していますが、カテゴリをコードで把握するのには適していません。わかりました。したがって、最初に行う必要があるのは、現在のページのproduct / postオブジェクトを取得していない場合です。

global $post;

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

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


37

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';
}

これを行う非常にシンプルで効果的な方法。これはより良い答えだと思います。
トレバー

短いのでこれを好みました。しかし、私がやったif { thing; return;}
Eoin

8

各カテゴリで同じことを行いたいと仮定すると、コードをたくさんのelseifチェックで煩雑にするのではなく、配列を呼び出すことでオプションのリストを調べることができることに注意してください。

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

// Do stuff here

else :

// Do some other stuff

endif;

この答えは編集としてミロの答えに追加されるべきだと思います。
サイブメタ


0

get_categories()WC_Productクラスの関数の使用を検討します。

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

基本的に、ページのループ内で関数を呼び出して、製品に関連付けられているカテゴリを返します。


これをコーディングすることはできません。これを機能させる方法がわかりません。誰かがこれを説明してください。そこまで頑張りました。これをget_categories()で置き換える必要がありますか?
アレックス

@Alex is_product_category()関数は、製品カテゴリページにいる場合にTRUEを返します。製品のカテゴリではありません。私は今プロジェクトに取り組んでいますが、後でコードスニペットを取得するようにします。
スティーブ

この小さなスニペットのコーディングに時間を割いてくれたStevenに感謝します。とても感謝しています。
アレックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.