Я создал вариант типа продукта ПОЛЬЗОВАТЕЛЬСКИЙ, все работает хорошо в серверной и внешней части, единственная проблема в том, что в корзине покупок / деталях оформления заказа не отображается переменное название продукта, а также после покупки товара запас не уменьшается, Для переменной доступен 1 товар, после покупки оставьте 1 товар доступным, а не отсутствующим на складе.
Это используемый код.
* Шаг 1. Добавьте пользовательский тип продукта «термин» к другим жестко запрограммированным one
*/
add_filter( 'product_type_selector', 'misha_ticket_product_type' );
function misha_ticket_product_type( $product_types ){
$product_types[ 'ticket' ] = ' Ticket';
return $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 {
public function __construct( $product ) {
$this->product_type = 'ticket';
$this-> support[] = 'ajax_add_to_cart';
родитель::__construct( $product );
public function get_type() {
return 'ticket'; // чтобы вы могли использовать $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;
?>
jQuery("body").bind("DOMNodeInserted", function() {
jQuery(this).find('.enable_variation').addClass('show_if_ticket').show();
});
Подробнее здесь: https://stackoverflow.com/questions/624 ... t-checkout