当前位置: 首页 > 知识库问答 >
问题:

自定义产品类型与变化,变化名称不显示在购物车/结账

蒋岳
2023-03-14

我创建了一个定制的产品类型变量,在后端和前端一切都很好,唯一的问题是,在购物车/结帐详细信息中,变量产品名称没有显示,而且在购买商品后库存没有减少,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*********************************//```

共有1个答案

拓拔稳
2023-03-14

我遇到了完全相同的问题,这是因为woocommerce\u add\u to\u cart\u handler期望get\u type返回'variable'以触发add\u to\u cart\u handler\u 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 );

根据这里的讨论,您需要类似上面的内容,如何添加自定义的WooCommerce产品类型,将WC_product_变量扩展到购物车

 类似资料:
  • 在我的WooCommerce商店中,当一个可变产品被添加到购物车时,我让用户停留在产品页面上。 成功通知消息显示了产品标题以及通用附件,但我希望它在通知中显示产品标题的变化,如: “男式外套尺寸:小”已添加到您的购物车中。 而不是: “男式外套”已添加到您的购物车中。 目前正在运行WooCommerce 3.3.1和WP 4.9。 谢啦

  • 我想用两个选定的变体替换购物车中的产品名称。理想情况下,采用这种格式: 变式1-变式2 对于下面的代码,它可以工作,但只显示第一个变体的名称。 有人找到这个漏洞了吗?或者知道它是如何工作的? 谢谢!

  • 我已经在woocommerce单一产品页面上添加了一些自定义选项,使用了下面关于我的主题函数的代码。php: 现在我想在购物车页面上显示所选的选项值。请帮我做这件事。谢啦

  • 我正在尝试为variations父产品创建一个单独的add to cart按钮。我正在使用以下方法访问产品数据: 谢谢你。

  • 目前正在使用WordPress 5.1.1和WooCommerce 3.5.7。我的WooCommerce商店有大约500种产品,由简单和多变的产品组成。 每个产品自然都有一个SKU,但每个产品也有一个称为“商品代码”的唯一ID代码。我向特定行业销售特定产品。 我已经在我的functions.php文件中添加了简单和可变产品的自定义字段的代码,目前效果很好。 我的问题是,我试图让“商品代码”出现在

  • 问题在于当我的客户尝试从购物车中编辑一个产品时。因为所有产品都有相同的ID(我只有一个产品),所以添加到购物车的最后一个产品的元加载到文本字段中。我当前使用产品id检索中的元,但该id与购物车中的所有其他产品相同。有没有其他方法可以在不使用/(如或使用会话)的情况下检索元?