Làm cách nào để kiểm tra xem sản phẩm có thuộc một danh mục nhất định trên một sản phẩm duy nhất.php trong Wooc Commerce không?


25

Làm thế nào trên thế giới tôi có thể kiểm tra nếu một sản phẩm là một loại sản phẩm nhất định trên đơn 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_c Category ('slug') không có ảnh hưởng đến một sản phẩm.php . Tôi muốn có các điều kiện trên. Bất kỳ giải pháp cho điều này trên một trang sản phẩm duy nhất?


Có thể là do tuyên bố đầu tiên của bạn đang thiếu một kết thúc )? Nó nên làif (is_product_category('audio'))
stealthyninja

Bắt tốt, nhưng đó không phải là nó. is_product_carget dường như không hoạt động trên một sản phẩm.php
Alex

Câu trả lời:


28

Tôi không nghĩ get_categories()là lựa chọn tốt nhất cho bạn trong trường hợp này bởi vì nó trả về một chuỗi với tất cả các danh mục được liệt kê dưới dạng thẻ neo, tốt để hiển thị, nhưng không tuyệt vời để tìm ra mã trong danh mục đó là gì. Ok, vì vậy điều đầu tiên bạn cần làm là lấy đối tượng sản phẩm / bài đăng cho trang hiện tại nếu bạn chưa có nó:

global $post;

Sau đó, bạn có thể nhận được các đối tượng hạn loại danh mục sản phẩm (các danh mục) cho sản phẩm. Ở đây tôi đang biến các đối tượng thuật ngữ danh mục thành một mảng đơn giản có tên $categoriesđể dễ dàng hơn để xem những con sên nào được gán. Lưu ý rằng điều này sẽ trả về tất cả các danh mục được gán cho sản phẩm, không chỉ một trong những trang hiện tại, tức là nếu chúng tôi đang trên /shop/audio/funzo/:

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

Sau đó, chúng ta chỉ cần kiểm tra xem một danh mục có trong danh sách hay không:

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

Để tất cả chúng cùng nhau:

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

Hy vọng rằng đây là những gì bạn đang tìm kiếm và trả lời câu hỏi của bạn.


37

has_term nên làm việc trong trường hợp này:

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

Cách siêu đơn giản và hiệu quả để làm điều này. Tôi nghĩ rằng đây là câu trả lời tốt hơn.
Trevor

Tôi thích điều này vì nó ngắn. Tuy nhiên tôi đã làmif { thing; return;}
Eoin

8

Điều đáng chú ý là bạn có thể đi qua một danh sách các tùy chọn bằng cách gọi một mảng thay vì phải làm lộn xộn mã của bạn với nhiều kiểm tra khác, giả sử bạn muốn làm điều tương tự với mỗi danh mục.

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

// Do stuff here

else :

// Do some other stuff

endif;

Tôi nghĩ câu trả lời này nên được thêm vào, dưới dạng chỉnh sửa, cho câu trả lời của Milo.
cybmeta


0

Tôi sẽ xem xét việc sử dụng get_categories()chức năng của lớp WC_ Productt.

Bạn có thể tìm thấy các liên kết đến các tài liệu ở đây .

Về cơ bản trong vòng lặp của trang gọi hàm để trả về các danh mục được liên kết với sản phẩm.


Tôi không thể mã này. Tôi không biết làm thế nào để làm việc này. Ai đó làm ơn minh họa điều này. Tôi đã cố gắng hết sức lên đó. Tôi có nên thay thế điều này bằng get_clists () không?
Alex

@Alex, hàm is_product_carget () trả về TRUE nếu bạn đang ở trang danh mục sản phẩm. Không phải là danh mục của sản phẩm. Tôi đang đi xuống một dự án ngay bây giờ, nhưng tôi sẽ cố gắng lấy cho bạn một đoạn mã sau.
Steve

Cảm ơn, Steven đã dành thời gian để viết đoạn mã nhỏ này. Đánh giá cao nó rất nhiều.
Alex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.