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

Php 根据商店和归档页面中的类别显示自定义产品SKU,php,wordpress,woocommerce,categories,product,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" cl

我主要是一名设计师,试图在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添加到商店页面
添加操作('WOOMerce'u在'u shop'u loop'u item'u title'、'shop'u sku'之后);
功能车间_sku(){
全球$产品;
回显“SKU:”。$product->SKU。“
”; }
效果很好。但是,我的客户希望根据类别在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>';  
    }
}
add_action('woocommerce_在_shop_loop_item_title'、'shop_sku'之后);
功能车间_sku(){
全球$产品;
$product_cats=wp_get_post_terms(获取_ID(),'product_cat');
if($product_cats==“当代地区地毯”){
回显“SKU:C-”.$product->SKU.
; } elseif($product_cats==“传统东方地区地毯”){ 回显“SKU:T-”.$product->SKU.
; } 否则{ 回显“SKU:S-”.$product->SKU.
; } }
我的问题是,只有第三个条件得到满足,这意味着所有SKU编号的前面都显示“S-”

有什么提示吗


感谢最好将本机条件函数
具有_term()
与类别slug或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>';
}
add_action('woocommerce_在_shop_loop_item_title'、'shop_sku'之后);
功能车间_sku(){
全球$post$product;
//最好用slug或ID替换类别名称!!!
如果(!has_)术语(‘当代现代地区地毯’、‘产品_猫’)和(!has_)术语(‘传统东方地区地毯’、‘产品_猫’))
$letter='S';
if(有“现代地区地毯”、“产品”一词)
$letter='C';
if(有“传统东方地毯”、“产品”一词)
$letter='T';
回显“SKU:”.$letter.-“.$product->SKU.
”; }
当然,这会出现在活动子主题(或主题)的function.php文件或任何插件文件中

此代码经过测试并正常工作。



参考资料:

您是否尝试了
var\u dump
ing
$product\u cats
?非常感谢您的回复。我只是试了一下……运气不好。这意味着$product_cats是空的,因此它不是“当代现代地区地毯”或“传统东方地区地毯”。你需要弄清楚它为什么会空着回来。
是否获取\u ID()
是否返回有效的ID?如果是这样的话,那么是什么打破了
wp\u get\u post\u terms
?非常感谢您的帮助。我只是得出了同样的结论…我确实发现(我想)我需要有身份证号码,我确实得到了。所以“当代地区地毯”的id是12,但它也是空的。我想我已经很接近了,我只是不知道如何到达那里…非常感谢你。很好!