Я уже искал решение и ничего не нашел по этому поводу.
В Woocommerce я регистрирую пользовательский тип продукта (подарочную карту), который расширяет WC_PRODUCT_VARIABLE
, а затем я устанавливаю атрибуты, варианты и инвентарь вкладки, которые будут отображаться, когда тип продукта - подарочная карта.
После этого я скопировал переменную. php шаблон в подарочную карту. 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/');
}
подарочная карта. php - копия переменной. 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';
}
}
Теперь, когда я создаю продукт подарочной карты, я могу видеть все атрибуты и варианты на странице редактирования продукта. Но во внешнем интерфейсе одна страница дает указанную выше ошибку, что ее нет в наличии.
При проверке значений $ атрибутов и $ available_variations , i получить либо пустой, либо пустой.
Надеюсь, я хорошо объяснил свой вопрос. Заранее благодарим за помощь.