根据商店和档案页面中的类别显示自定义产品SKU

时间:2016-09-02 20:28:26

标签: php wordpress woocommerce categories product

我主要是一名设计师,并试图在PHP中弄湿我的脚,因为它与Wordpress有关。

我正在使用woocommerce,并希望在类别页面上显示SKU。到目前为止,我有这个:

//* add SKU to shop page

add_action( 'woocommerce_after_shop_loop_item_title', 'shop_sku' );
function shop_sku(){
global $product;
echo '<span itemprop="productID" class="sku">SKU: ' . $product->sku . '<br></span>';
}

效果很好。但是,我的客户希望在SKU之前显示一封信,具体取决于类别。我认为添加到函数中可能是有意义的,而不是通过并更改所有SKU编号。

add_action( 'woocommerce_after_shop_loop_item_title', 'shop_sku' );
function shop_sku(){
    global $product;
    $product_cats = wp_get_post_terms( get_the_ID(), 'product_cat' );

    if ($product_cats == "Contemporary Modern Area Rugs") {
        echo '<span itemprop="productID" class="sku">SKU: C-' . $product->sku . '<br></span>';
    }

    elseif ($product_cats == "Traditional Oriental Area Rugs") {
        echo '<span itemprop="productID" class="sku">SKU: T-' . $product->sku . '<br></span>';
    }

    else {
        echo '<span itemprop="productID" class="sku">SKU: S-' . $product->sku . '<br></span>';  
    }
}

我的问题是只满足第三个条件,这意味着所有SKU号码都显示为&#34; S - &#34;在前面。

任何提示?

由于

1 个答案:

答案 0 :(得分:2)

最好将本机条件函数 has_term() 与slugs或ID类别一起使用。

我已经对您的代码进行了一些自定义:

add_action( 'woocommerce_after_shop_loop_item_title', 'shop_sku' );
function shop_sku(){
    global $post, $product;

    //It's better to REPLACE the category name by the slug or the ID !!!

    if ( !has_term( 'Contemporary Modern Area Rugs', 'product_cat' ) && !has_term( 'Traditional Oriental Area Rugs', 'product_cat' ) )
        $letter = 'S';

    if ( has_term( 'Contemporary Modern Area Rugs', 'product_cat' ) )
        $letter = 'C';

    if ( has_term( 'Traditional Oriental Area Rugs', 'product_cat' ) )
        $letter = 'T';

    echo '<span itemprop="productID" class="sku">SKU: '. $letter .'-' . $product->sku . '<br></span>';
}

当然,这可以在您的活动子主题(或主题)的function.php文件中,也可以在任何插件文件中。

此代码经过测试且有效。

参考:WordPress Function has_term()