Woocommerce'da ürünün belirli bir kategorideki tek bir product.php'da olup olmadığını kontrol etme?


25

Tek bir üründe, bir ürünün tek bir ürün kategorisinde belirli bir ürün kategorisinde olup olmadığını nasıl kontrol edebilirim ?

<?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') ' un single-product.php üzerinde bir etkisi yoktur . Ben üst koşullara sahip olmak istiyorum. Tek bir ürün sayfasında bunun için herhangi bir çözüm?


İlk açıklamanızın kapanması eksik olduğu için olabilir )mi? Olması gerekenif (is_product_category('audio'))
stealthyninja

İyi yakala, ama o değil. is_product_category, single-product.php üzerinde çalışmıyor gibi görünüyor
Alex,

Yanıtlar:


28

get_categories()Bu durumda sizin için en iyi seçenek olduğunu sanmıyorum , çünkü bağlantı etiketleri olarak listelenen tüm kategorileri içeren bir dize döndürüyor, görüntülemek için iyi, ancak kodların kategorilerin ne olduğunu bulmak için harika değil. Tamam, yapmanız gereken ilk şey, sizde yoksa geçerli sayfanın ürün / yazı nesnesini almaktır:

global $post;

Sonra ürün için ürün kategorisi terim nesnelerini (kategorileri) alabilirsiniz. Burada kategori terim nesnelerini adlandırılmış basit bir diziye çeviriyorum, $categoriesböylece hangi sümüklü böceklerin atandığını görmek daha kolay. Bunun , yalnızca geçerli sayfanın kategorisine değil, ürüne atanan tüm kategorileri, yani açıksa /shop/audio/funzo/:

$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

O zaman bir kategorinin listede olup olmadığını kontrol etmeliyiz:

if ( in_array( 'audio', $categories ) ) {  // do something

Hepsini bir araya koy:

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

Umarım aradığınız şey budur ve sorunuzu yanıtlar.


37

has_term Bu durumda çalışmalı:

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

Bunu yapmanın süper basit ve etkili bir yol. Bence bu daha iyi bir cevap.
Trevor

Bunu tercih ettim çünkü kısa. Ancak yaptımif { thing; return;}
Eoin

8

Her kategoride aynı şeyi yapmak istediğinizi varsayarak, kodunuzu bir sürü başka denetimle karıştırmak yerine bir diziyi çağırarak bir seçenek listesini gözden geçirebileceğinize dikkat edin.

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

// Do stuff here

else :

// Do some other stuff

endif;

Bence bu cevap Milo'nun cevabına düzenleme olarak eklenmeli.
Cybmeta


0

get_categories()WC_Product sınıfının işlevini kullanmaya bakardım.

Dokümantasyon bağlantısını burada bulabilirsiniz .

Temelde sayfanın döngüsü içinde, ürünle ilişkili kategorileri döndürmek için işlevi çağırın.


Bunu kodlayamıyorum. Bunun işe yarayabilmesi için hiçbir fikrim yok. Biri lütfen bunu resmet. Orada elimden geleni yaptım. Bunu get_category () ile değiştirmeli miyim?
Alex,

@Alex, is_product_category () işlevi, ürün kategorisi sayfasındaysanız TRUE değerini döndürür. Ürünün kategorisi değil. Şu anda bir projeye başlıyorum, ancak daha sonra size bir kod pasajı almaya çalışacağım.
Steve

Bu küçük pasajı kodlamak için zaman ayırdığın için teşekkürler Steven. Çok takdir ediyorum.
Alex,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.