【问题标题】:Woocommerce custom product_type seems not to be saved correctlyWoocommerce 自定义 product_type 似乎没有正确保存
【发布时间】:2017-03-24 13:01:13
【问题描述】:

我正在为 woocommerce 创建自己的插件,并意识到在创建或更新产品时不会保存我的自定义 product_type。我确定问题出在我的插件上,但我不确定在哪里查看。 添加product_type的函数(根据帖子)

function extend_woocommerce()
{
    Class WC_Product_Connected_To_General_Product extends WC_Product_Simple
    {
        public function __construct($product)
        {
            $this->product_type = 'connected_to_general_product';
            $this->manage_stock = 'yes';
            parent::__construct($product);
        }
    }
}

插件中调用的类

Class general_stock {

/**
 * general_stock constructor.
 */
function __construct()
{
    if($this->check_if_woocommerce_is_active()){
     add_action('init',[$this, 'add_woocommerce_product_type'])
     add_filter('product_type_selector', [$this,'add_woocommerce_product_type_general_connected_product']);

...
}
/**
 * add_woocommerce_product_type
 */
function add_woocommerce_product_type(){
    extend_woocommerce();
}
/**
 * add_woocommerce_product_type_general_connected_product
 * @param $types
 * @return mixed
 */
function add_woocommerce_product_type_general_connected_product($types){
    $types[$this->product_type_name] = __('Connected to general Product','ln-general-stock');
    return $types;
}

但是到目前为止“一切”都有效:我可以在后端选择新产品类型并将其保存。 (编辑产品时选择)。

但是当我在前端查询产品并转储它时,product_type 的值等于simple,我认为应该是connected_to_general_product,或者此信息是否存储在另一个值中?

提前感谢您的帮助!

【问题讨论】:

  • 我刚刚发现,product_type 通过这个帖子保存为术语:stackoverflow.com/questions/28355770/…
  • 是否定义了$this->product_type_name?如果没有,则选择元素将没有要保存的值,WooCommerce 可能会将其保存为simple

标签: wordpress woocommerce


【解决方案1】:

请记住,产品类名称的扩展必须以 WP_Product_ 开头,然后是产品类型。例如:

class WC_Product_Moto extends WC_Product {
    protected $product_type = 'moto';

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

【讨论】:

  • 这解决了我的问题,我将 MyCustomClass 更改为 WC_Product_Mytype
【解决方案2】:

我可能会重新安排一下插件的结构。我喜欢在woocommerce_loaded 插件上加载插件,然后您甚至不需要条件检查来查看 WooCommerce 是否处于活动状态。但我认为问题在于您要添加到 product_type_selector 过滤器的数组键/值对。

Class general_stock {

    /**
     * pseudo constructor.
     */
    public static function init()
    {
        include_once( 'path-to/class-wc-product-connected-to-general-product.php' );
         add_filter('product_type_selector', array( __CLASS__, 'add_woocommerce_product_type_general_connected_product' ) );
    }

    ...


    /**
     * add_woocommerce_product_type_general_connected_product
     * @param $types
     * @return mixed
     */
    public static function add_woocommerce_product_type_general_connected_product($types){
        $types['general-product'] = __('Connected to general Product','ln-general-stock');
        return $types;
    }

}

add_action( 'woocommerce_loaded', 'general_stock::init');

Class WC_Product_Connected_To_General_Product extends WC_Product_Simple
{
    public function __construct($product)
    {
        $this->product_type = 'connected_to_general_product';
        $this->manage_stock = 'yes';
        parent::__construct($product);
    }
}

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,发现我必须在我的案例中定义一个缺失的函数

    if (class_exists('WC_Product_Simple')) {
        class WC_Product_Ebook_Store extends WC_Product_Simple {
    
        public function __construct( $product ) {
    
            $this->product_type = 'ebook_store';
    
            parent::__construct( $product );
    
        }
        public function get_type() {
            return 'ebook_store';
        }
    
        }
    }
    

    【讨论】:

      【解决方案4】:

      另外,如果不起作用,请添加此代码。

      add_filter( 'woocommerce_product_class', array($this,'load_custom_product_type_class'), 10, 2 );
      
          public function load_custom_product_type_class( $classname, $product_type ){
              if ( $product_type == 'your_custom_product_type_here' ) {
                  $classname = 'YOUR_PRODUCT_TYPE_CLASS_NAME';
              }
              return $classname;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-05
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 2010-09-08
        • 2016-12-26
        • 1970-01-01
        相关资源
        最近更新 更多