我创建了一个CUSTOM产品类型变体,后端和前端一切正常,唯一的问题是,在购物车/结帐明细中,可变产品名称未显示,购买商品后库存也不减少,购买该变量后有1件商品,购买后,请保留1件商品而不是缺货。
这是使用的代码。
* Step 1. Add a custom product type "term" to other hardcoded ones */ add_filter( 'product_type_selector', 'misha_ticket_product_type' ); function misha_ticket_product_type( $product_types ){ $product_types[ 'ticket' ] = 'Ticket'; return $product_types; } /** * Step 2. Each product type has a PHP class WC_Product_{type} */ add_action( 'init', 'misha_create_ticket_product_class' ); add_filter( 'woocommerce_product_class', 'misha_load_ticket_product_class',10,2); function misha_create_ticket_product_class(){ class WC_Product_Ticket extends WC_Product_Variable { public function __construct( $product ) { $this->product_type = 'ticket'; $this->supports[] = 'ajax_add_to_cart'; parent::__construct( $product ); } public function get_type() { return 'ticket'; // so you can use $product = wc_get_product(); $product->get_type() } } } add_filter('woocommerce_product_data_tabs','ticket_showtabs',10,1); function ticket_showtabs($tabs) { array_push($tabs['attribute']['class'], 'show_if_variable', 'show_if_ticket'); array_push($tabs['variations']['class'], 'show_if_ticket'); return $tabs; } function producttype_custom_js() { if ( 'product' != get_post_type() ) : return; endif; ?><script type='text/javascript'> jQuery("body").bind("DOMNodeInserted", function() { jQuery(this).find('.enable_variation').addClass('show_if_ticket').show(); }); </script><?php } add_action( 'admin_footer', 'producttype_custom_js' ,99); function misha_load_ticket_product_class( $php_classname, $product_type ) { if ( $product_type == 'ticket' ) { $php_classname = 'WC_Product_Ticket'; } return $php_classname; } add_filter( 'woocommerce_data_stores', function( $stores ){ $stores['product-ticket'] = 'WC_Product_Variable_Data_Store_CPT'; return $stores; } ); add_action( 'woocommerce_ticket_add_to_cart', 'woocommerce_variable_add_to_cart' ); //**************************************END*********************************//```
答案 0 :(得分:0)
我遇到了完全相同的问题,并且发生是因为woocommerce_add_to_cart_handler
期望get_type
返回'variable'
才能触发add_to_cart_handler_variable
方法。
function misha_custom_add_to_cart_handler( $handler, $adding_to_cart ){
if( $handler == 'ticket' ){
$handler = 'variable';
}
return $handler;
}
add_filter( 'woocommerce_add_to_cart_handler', 'misha_custom_add_to_cart_handler', 10, 2 );
根据How to add a custom WooCommerce product type that extends WC_Product_Variable to the cart
的讨论,您将需要上述类似的内容