我正在创建自己的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
或者此信息是否存储在另一个值中?
提前感谢您的帮助!
答案 0 :(得分:0)
我可能会稍微重新安排插件的结构。我喜欢在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);
}
}
答案 1 :(得分:0)
我遇到了同样的问题,发现我必须在我的案例中定义一个缺失的函数
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';
}
}
}
答案 2 :(得分:0)
请记住,产品类名称的扩展必须以WP_Product_开头,后跟producto类型。例如:
Console.WriteLine(" ".IsEmptyOrAllSpaces()); // true
Console.WriteLine("".IsEmptyOrAllSpaces()); // true
Console.WriteLine(" BOO ".IsEmptyOrAllSpaces()); // false
string testMe = null;
Console.WriteLine(testMe.IsEmptyOrAllSpaces()); // false
答案 3 :(得分:0)
另外,如果不起作用,请添加此代码。
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;
}