wordpress - 具有变体的自定义产品类型,变体名称未显示在购物车/结帐中
问题描述
我创建了一个 CUSTOM 产品类型变体,后端和前端一切正常,唯一的问题是,在购物车/结帐详细信息中,变量产品名称未显示,购买商品后库存未减少,有 1 件商品对于变量,购买后,保持 1 项可用而不是缺货。
这是使用的代码。
* 步骤 1. 将自定义产品类型“术语”添加到其他硬编码的产品中 */ add_filter('product_type_selector', 'misha_ticket_product_type'); 功能 misha_ticket_product_type( $product_types ){ $product_types['ticket'] = 'ticket'; 返回 $product_types; } /** * 步骤 2. 每个产品类型都有一个 PHP 类 WC_Product_{type} */ add_action('init', 'misha_create_ticket_product_class'); add_filter('woocommerce_product_class', 'misha_load_ticket_product_class',10,2); 功能 misha_create_ticket_product_class(){ WC_Product_Ticket 类扩展 WC_Product_Variable { 公共函数 __construct( $product ) { $this->product_type = '票'; $this->supports[] = 'ajax_add_to_cart'; 父::__construct($product); } 公共函数 get_type() { 往返票'; // 所以你可以使用 $product = wc_get_product(); $product->get_type() } } } add_filter('woocommerce_product_data_tabs','ticket_showtabs',10,1); 功能ticket_showtabs($标签){ array_push($tabs['attribute']['class'], 'show_if_variable', 'show_if_ticket'); array_push($tabs['variations']['class'], 'show_if_ticket'); 返回$标签; } 功能 producttype_custom_js() { 如果('产品'!= get_post_type()): 返回; 万一; ?><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); 功能 misha_load_ticket_product_class( $php_classname, $product_type ) { if ( $product_type == 'ticket' ) { $php_classname = 'WC_Product_Ticket'; } 返回 $php_classname; } add_filter('woocommerce_data_stores',函数($stores){ $stores['product-ticket'] = 'WC_Product_Variable_Data_Store_CPT'; 返回$商店; }); add_action('woocommerce_ticket_add_to_cart', 'woocommerce_variable_add_to_cart'); //**************************************结尾********* ************************//```
解决方案
我遇到了完全相同的问题,它发生是因为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 );
根据此处的讨论,您将需要类似于上述内容的内容如何添加将 WC_Product_Variable 扩展到购物车的自定义 WooCommerce 产品类型