在Woocommerce 3

时间:2018-03-17 13:20:19

标签: php wordpress class woocommerce product

在Woocommerce中,我创建了一个自定义产品类型live_stream

但是当我在这个自定义类型中创建一个新产品并且我发布它时,该产品仍然是一个简单的产品"并且没有为其设置live_stream自定义类型。

我做错了什么?如何使该定制产品类型起作用?

这是我的代码

function wpstream_register_live_stream_product_type() {
    class Wpstream_Product_Live_Stream extends WC_Product {
        public function __construct( $product ) {

            $this->product_type = 'live_stream';
            parent::__construct( $product );

        }

        public function get_type() {
            return 'live_stream';
        }
    }
}

add_action( 'init', 'wpstream_register_live_stream_product_type' );

function wpstream_add_products( $types ){
    $types[ 'live_stream' ]             = __( 'Live Channel','wpestream' );
    return $types;
}
add_filter( 'product_type_selector', 'wpstream_add_products' );

1 个答案:

答案 0 :(得分:1)

由于Woocommerce 3 $this->product_type = 'live_stream';已被弃用,因此在构造函数中不需要。必须通过在此自定义产品类型的类中的构造函数外定义函数get_type()来替换它。

所以你的代码将是:

add_action( 'init', 'new_custom_product_type' );
function new_custom_product_type(){
    class WC_Product_Live_Stream extends WC_Product{

        public function __construct( $product ) {
            parent::__construct( $product );
        }

        // Needed since Woocommerce version 3
        public function get_type() {
            return 'live_stream';
        }
    }
}

add_filter( 'product_type_selector', 'custom_product_type_to_type_selector' );
function custom_product_type_to_type_selector( $types ){
    $types[ 'live_stream' ] = __( 'Live Channel', 'wpestream' );
    return $types;
}

代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作。

这可以解决您的问题。