Bagaimana cara memeriksa apakah produk tersebut dalam kategori tertentu pada satu-produk.php di Woocommerce?


25

Bagaimana di dunia saya dapat memeriksa apakah suatu produk dalam kategori produk tertentu pada 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') tidak berpengaruh pada single-product.php . Saya ingin memiliki persyaratan atas. Adakah solusi untuk ini pada satu halaman produk?


Mungkin karena pernyataan pertama Anda tidak ada penutupan )? Seharusnyaif (is_product_category('audio'))
stealthyninja

Tangkapan bagus, tapi bukan itu. is_product_category tampaknya tidak berfungsi pada single-product.php
Alex

Jawaban:


28

Saya tidak berpikir get_categories()adalah pilihan terbaik untuk Anda dalam hal ini karena ini mengembalikan string dengan semua kategori yang terdaftar sebagai tag jangkar, baik untuk ditampilkan, tetapi tidak bagus untuk mencari tahu dalam kode apa kategorinya. Ok, jadi hal pertama yang perlu Anda lakukan adalah ambil objek produk / posting untuk halaman saat ini jika Anda belum memilikinya:

global $post;

Kemudian Anda bisa mendapatkan objek istilah kategori produk (kategori) untuk produk. Di sini saya mengubah objek istilah kategori menjadi array sederhana bernama $categoriessehingga lebih mudah untuk melihat siput apa yang ditugaskan. Perhatikan bahwa ini akan mengembalikan semua kategori yang ditetapkan untuk produk, bukan hanya yang ada di halaman saat ini, yaitu jika kita aktif /shop/audio/funzo/:

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

Maka kita hanya perlu memeriksa apakah suatu kategori ada dalam daftar:

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

Menyatukan semuanya:

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

Semoga ini yang Anda cari dan jawab pertanyaan Anda.


37

has_term harus bekerja dalam hal ini:

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

Cara super sederhana dan efektif untuk melakukan ini. Saya pikir ini adalah jawaban yang lebih baik.
Trevor

Saya lebih suka ini karena pendek. Namun saya lakukanif { thing; return;}
Eoin

8

Perlu dicatat bahwa Anda dapat menelusuri daftar opsi dengan memanggil array daripada harus mengacaukan kode Anda dengan banyak cek lain, dengan asumsi Anda ingin melakukan hal yang sama dengan setiap kategori.

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

// Do stuff here

else :

// Do some other stuff

endif;

Saya pikir jawaban ini harus ditambahkan, sebagai perbaikan, ke jawaban Milo.
cybmeta


0

Saya akan melihat menggunakan get_categories()fungsi kelas WC_Product.

Anda dapat menemukan tautan ke dokumentasi di sini .

Pada dasarnya di dalam loop halaman, panggil fungsi untuk mengembalikan kategori yang terkait dengan produk.


Saya tidak dapat kode ini. Saya tidak punya petunjuk bagaimana membuatnya bekerja. Seseorang tolong gambarkan ini. Saya mencoba yang terbaik di sana. Haruskah saya mengganti ini dengan get_categories ()?
Alex

@Alex fungsi is_product_category () mengembalikan TRUE jika Anda berada di halaman kategori produk. Bukan kategori produk. Saya sedang mengerjakan proyek sekarang, tetapi saya akan mencoba memberi Anda potongan kode nanti.
Steve

Terima kasih, Steven telah meluangkan waktu untuk mengkodekan cuplikan kecil ini. Sangat menghargainya.
Alex
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.