WooCommerce'product_type_selector'过滤器显示我的自定义类型,但保存为简单产品

时间:2016-12-06 06:39:47

标签: php wordpress woocommerce

我正在尝试使用product_type_selector过滤器通过插件添加自定义产品类型,虽然我的产品在选择中显示但是每当我保存产品选择我的产品类型时它会显示“简单”产品,如果我这样做var_dump( $product->product_type )模板上的single-product.php

我不知道我在这里做错了什么。任何帮助,将不胜感激。这是我的代码。

<?php
/**
 * Plugin Name: MY CuSTOM PRODUCT TYPE
 * @since       1.0
 */

/**
* Required functions
*/
function product_code_loader() {
  class WC_Product_Custom_Product_Type extends WC_Product {
    public function __construct( $product ) {
      $this->product_type = 'my_custom_product_type';
      parent::__construct( $product );
      add_filter( 'product_type_selector', array( $this, 'add_my_custom_product_type_to_select' ) );
    }

    function add_my_custom_product_type_to_select( $product_types ) {
      $product_types['my_custom_product_type'] = __( 'My Custom Product Type', 'my_custom_product_type' );
      return $product_types;
    }
  }
  new WC_Product_Custom_Product_Type(null);
}
add_action('plugins_loaded', 'product_code_loader');

3 个答案:

答案 0 :(得分:0)

添加新产品类型时,需要扩展WC_Product类。

class WC_Product_New_Product_type extends WC_Product{

}

您可以阅读this tutorial以查看其工作原理。此示例将向您显示如何在选择新产品类型时将新产品类型添加到选择,隐藏面板...

这是我通过扩展WC_Product类来实现的。

class WC_Product_Online_Service_Product extends WC_Product {
    public function __construct( $product ) {

        $this->product_type = 'online_service_product';

        parent::__construct( $product );

        // actions & filters follow
    }
 new WC_Product_Online_Service_Product(null); // parameter null but not empty.

正如你所看到__construct()有一个参数,我不使用静态函数(真的不知道你是否可以)。尝试将其添加到init()

答案 1 :(得分:0)

有趣但看起来像我的问题是短划线或下划线。 我现在正在努力解决同样的问题并发现:&#39; custom_product&#39;不行,但定制&#39;会保存。

答案 2 :(得分:0)

您是否尝试调整classname + product_type字符串?我已经修复了我的问题,使其兼容。

例如:WC_Product_Custom_Product_Type应该收到custom_product_type而不是my_custom_product_type,或者在您的示例中将其修改为WC_Product_My_Custom_Product_Type