WooCommerce 3.0 +

时间:2017-08-18 07:56:44

标签: php wordpress woocommerce

我一直在尝试使用here找到的代码:

// For WooCommerce Version 3.0+ (only)
add_action( 'woocommerce_shop_loop_item_title', 'custom_attributes_display', 20 );
function custom_attributes_display(){

    // Just for product category archives pages
    if(is_product_category()){
        global $product;

        // the array of attributes names
        $attribute_names = array('pa_guaranteed-ram', 'pa_cpu', 'pa_disk', 'pa_traffic');
        foreach( $attribute_names as $key => $attribute_name ) {

            // For WooCommerce version 3.0+
            $product_id = $product->get_id(); // WC 3.0+

            // Getting the value of an attribute (OK for WC 3.0+)
            $attribute_value = array_shift(wc_get_product_terms( $product_id, $attribute_name));

            // Displays only if attribute exist for the product
            if(!empty($attribute_value)){ // Updated
                echo $attribute_value;

                // Separating each number by a " / "
                if($key < 3) echo ' / ';
            }
        }
    }
}

但我总是最终得到错误:可捕获的致命错误:类WP_Term的对象无法在第51行的../functions.php中转换为字符串这是这一行:

echo $attribute_value;

我试图从中提取术语的四个属性中的每一个只有一个值,所以我不确定array_shift是否是问题的一部分,但是在删除时它仍然不起作用。

我还检查了many other postsguides但仍然无法弄清楚..我是PHP新手,任何人感谢您的帮助,如果我发布的内容不正确,我很抱歉。

这篇文章不是任何其他帖子的副本,因为另一篇帖子有很多人说它有效,并且&#34;谢谢!&#34;当它对我不起作用时,显然我的情况有所不同......而且,由于是新的,我无法在另一篇文章上发表评论,所以我应该如何获得帮助?洛尔

1 个答案:

答案 0 :(得分:0)

您的exec代码应该有效地使用$product->id而不是$product->get_id()

// For WooCommerce Version 3.0+ (only)
add_action( 'woocommerce_shop_loop_item_title', 'custom_attributes_display', 20 );
function custom_attributes_display(){

    // Just for product category archives pages
    if(is_product_category()){
        global $product;

        // the array of attributes names
        $attribute_names = array('pa_guaranteed-ram', 'pa_cpu', 'pa_disk', 'pa_traffic');
        foreach( $attribute_names as $key => $attribute_name ) {

            // Getting the value of an attribute (OK for WC 3.0+)
            $attribute_value = array_shift(wc_get_product_terms( $product->id, $attribute_name));

            // Displays only if attribute exist for the product
            if(!empty($attribute_value)){ // Updated
                echo $attribute_value;

                // Separating each number by a " / "
                if($key < 3) echo ' / ';
            }
        }
    }
}