WooCommerce 自定义可变产品类型(缺货问题)

问题描述 投票:0回答:1

我已经搜索过解决方案,但没有得到这方面的信息。

在 Woocommerce 中,我正在注册一个扩展了

WC_PRODUCT_VARIABLE
的自定义产品类型(礼品卡),然后我设置当产品类型为礼品卡时要显示的属性、变体和库存选项卡。

之后,我将variable.php模板复制到giftcard.php。问题是我没有得到前端显示的变化。

它总是说:

该产品目前缺货,无法购买。

产品类型设置:

add_filter('product_type_selector', 'knlShopCreateGiftcardProductType');
function knlShopCreateGiftcardProductType($types) {
    $types['knl_shop_giftcard'] = __('Gift Card', 'knl-shop');
    return $types;
}

add_action('init', 'knlShopGiftcardProductTypeClass');
function knlShopGiftcardProductTypeClass() {
    require_once KNL_SHOP_INC . '/class-knlshop-wc-giftcard-prod-type.php';
}

add_filter('woocommerce_product_class', 'knlShopInitGiftcardProductTypeClass', 10, 2);
function knlShopInitGiftcardProductTypeClass( $classname, $product_type ) {
    if ( $product_type == 'knl_shop_giftcard' ) {
        $classname = 'KNL_SHOP_WC_GIFTCARD_PROD_TYPE';
    }
    return $classname;
}

add_action('admin_footer', 'knlShopGiftcardProductTypeDataTabs');
function knlShopGiftcardProductTypeDataTabs() {
if('product' != get_post_type()) :
    return;
endif;
?>
<script type='text/javascript'>
jQuery(document).ready(function () {
      
jQuery('.enable_variation').addClass('show_if_knl_shop_giftcard').show();
            jQuery('.inventory_options').addClass('show_if_knl_shop_giftcard').show();
jQuery('#inventory_product_data ._manage_stock_field').addClass('show_if_knl_shop_giftcard').show();
jQuery('#inventory_product_data ._sold_individually_field').parent().addClass('show_if_knl_shop_giftcard').show();
jQuery('#inventory_product_data ._sold_individually_field').addClass('show_if_knl_shop_giftcard').show();
        });
</script>
<?php

}

add_filter('woocommerce_product_data_tabs', 'knlShopAddProductDataTabsForGiftcard', 10, 1);
function knlShopAddProductDataTabsForGiftcard($tabs) {
    array_push($tabs['attribute']['class'], 'show_if_variable show_if_knl_shop_giftcard');
    array_push($tabs['variations']['class'], 'show_if_knl_shop_giftcard');
    array_push($tabs['inventory']['class'], 'show_if_knl_shop_giftcard');
    //array_push($tabs['general']['class'], 'show_if_knl_shop_giftcard');

    return $tabs;
}

add_action('woocommerce_knl_shop_giftcard_add_to_cart',  'knl_shop_giftcard_add_to_cart');
function knl_shop_giftcard_add_to_cart() {
wc_get_template('single-product/add-to-cart/giftcard.php', $args = array(), $template_path = '', KNL_SHOP_PATH . '/woocommerce/');
}

giftcard.php 是variable.php 的副本

然后我的定制产品类别如下:

class KNL_SHOP_WC_GIFTCARD_PROD_TYPE extends WC_Product_Variable {
    public function __construct( $product = 0 ) {
        parent::__construct( $product );
    }

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

现在,当我创建礼品卡产品时,我可以在产品编辑页面中看到所有属性和变体。但在前端,单页会出现上述错误,缺货。

检查 $attributes 的值和 $available_variations,我要么为空,要么为 null。

我希望我已经很好地解释了我的问题。预先感谢您的帮助。

php wordpress woocommerce
1个回答
2
投票

需要为新的自定义产品类型定义数据存储类。为此,请使用过滤器 woocommerce_data_stores:



    /**
     * Defines Data Store Class for new custom product type
     * @param array $stores
     * @return array
     */
    function your_function( $stores ) {
        $stores['product-knl_shop_giftcard] = 'WC_Product_Variable_Data_Store_CPT';
        return $stores;
    }
    add_filter( 'woocommerce_data_stores', 'your_function', 10, 1 );


© www.soinside.com 2019 - 2024. All rights reserved.