/ Сайтостроение / Плагины / Поле для вариативного товара

Поле для вариативного товара

01.08.2018

288

Как делать произвольные (пользовательские) поля для товаров Woocommerce описано здесь. Но теперь пойдем дальше — сделаем поле для вариативного товара. Это должно открыть горизонты для интересных решений. Но я предвижу сложность в реализации вывода данного поля во фронтенде.

Создание и сохранение поля для вариации

// Add Variation Settings
add_action( 'woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3 );
// Save Variation Settings
add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );

// Create new fields for variations
function variation_settings_fields( $loop, $variation_data, $variation ) {
	// Text Field
	woocommerce_wp_text_input( 
		array( 
			'id'          => '_text_field[' . $variation->ID . ']', 
			'label'       => __( 'My Text Field', 'woocommerce' ), 
			'placeholder' => 'http://',
			'desc_tip'    => 'true',
			'description' => __( 'Enter the custom value here.', 'woocommerce' ),
			'value'       => get_post_meta( $variation->ID, '_text_field', true )
		)
	);
	// Number Field
	woocommerce_wp_text_input( 
		array( 
			'id'          => '_number_field[' . $variation->ID . ']', 
			'label'       => __( 'My Number Field', 'woocommerce' ), 
			'desc_tip'    => 'true',
			'description' => __( 'Enter the custom number here.', 'woocommerce' ),
			'value'       => get_post_meta( $variation->ID, '_number_field', true ),
			'custom_attributes' => array(
							'step' 	=> 'any',
							'min'	=> '0'
						) 
		)
	);
	// Textarea
	woocommerce_wp_textarea_input( 
		array( 
			'id'          => '_textarea[' . $variation->ID . ']', 
			'label'       => __( 'My Textarea', 'woocommerce' ), 
			'placeholder' => '', 
			'description' => __( 'Enter the custom value here.', 'woocommerce' ),
			'value'       => get_post_meta( $variation->ID, '_textarea', true ),
		)
	);
	// Select
	woocommerce_wp_select( 
	array( 
		'id'          => '_select[' . $variation->ID . ']', 
		'label'       => __( 'My Select Field', 'woocommerce' ), 
		'description' => __( 'Choose a value.', 'woocommerce' ),
		'value'       => get_post_meta( $variation->ID, '_select', true ),
		'options' => array(
			'one'   => __( 'Option 1', 'woocommerce' ),
			'two'   => __( 'Option 2', 'woocommerce' ),
			'three' => __( 'Option 3', 'woocommerce' )
			)
		)
	);
	// Checkbox
	woocommerce_wp_checkbox( 
	array( 
		'id'            => '_checkbox[' . $variation->ID . ']', 
		'label'         => __('My Checkbox Field', 'woocommerce' ), 
		'description'   => __( 'Check me!', 'woocommerce' ),
		'value'         => get_post_meta( $variation->ID, '_checkbox', true ), 
		)
	);
	// Hidden field
	woocommerce_wp_hidden_input(
	array( 
		'id'    => '_hidden_field[' . $variation->ID . ']', 
		'value' => 'hidden_value'
		)
	);
}

// Save new fields for variations
function save_variation_settings_fields( $post_id ) {
	// Text Field
	$text_field = $_POST['_text_field'][ $post_id ];
	if( ! empty( $text_field ) ) {
		update_post_meta( $post_id, '_text_field', esc_attr( $text_field ) );
	}
	
	// Number Field
	$number_field = $_POST['_number_field'][ $post_id ];
	if( ! empty( $number_field ) ) {
		update_post_meta( $post_id, '_number_field', esc_attr( $number_field ) );
	}
	// Textarea
	$textarea = $_POST['_textarea'][ $post_id ];
	if( ! empty( $textarea ) ) {
		update_post_meta( $post_id, '_textarea', esc_attr( $textarea ) );
	}
	
	// Select
	$select = $_POST['_select'][ $post_id ];
	if( ! empty( $select ) ) {
		update_post_meta( $post_id, '_select', esc_attr( $select ) );
	}
	
	// Checkbox
	$checkbox = isset( $_POST['_checkbox'][ $post_id ] ) ? 'yes' : 'no';
	update_post_meta( $post_id, '_checkbox', $checkbox );
	
	// Hidden field
	$hidden = $_POST['_hidden_field'][ $post_id ];
	if( ! empty( $hidden ) ) {
		update_post_meta( $post_id, '_hidden_field', esc_attr( $hidden ) );
	}
}

Вывод поля во фронтенде

Добавляем значение поля в массив вариации:

// Add New Variation Settings
add_filter( 'woocommerce_available_variation', 'load_variation_settings_fields' );

//Add custom fields for variations
function load_variation_settings_fields( $variations ) {
	
	// duplicate the line for each field
	$variations['text_field'] = get_post_meta( $variations[ 'variation_id' ], '_text_field', true );
	
	return $variations;
}

Изменяем шаблон вывода информации вариативного товара (woocommerce/single-product/add-to-cart/variation.php), добавив в него

<div class="woocommerce-variation-custom-text-field">
{{{ data.variation.text_field }}}
</div>

Теперь при выборе вариации значение поля будет выводиться там, где мы его установили.

Благодарность за решение Реми Корсон, ссылка на источник.

Но пока от этого поля польза нулевая, т.к. для доп. информации поле итак было. Нужно подумать как его использовать. Например в виде единицы товара, только для вариации.

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Добавление полей при оформлении заказа

Добавление полей при оформлении заказа

Добавляем поля для шаблона Оформление заказа Woocommerce. Стандартные поля Woocommerce делятся на 3 группы: поля оплаты (billing) поля доставки (shipping) поля аккаунта (account) Добавляем текстовое поле в стандартные группы WC Читать далее »

/
Переключение вида вывода товаров

Переключение вида вывода товаров

Для разных людей по разному удобно просматривать товары: когда они строятся в виде плиток, либо в линию или другими способами. Добавим на сайт функционал переключения вида отображения товаров в архивах. Читать далее »

/
Несколько менеджеров магазина

Несколько менеджеров магазина

Предположим что мы делаем интернет-магазин оптовой компании нацеленной работу с уже имеющимися клиентами. Есть ряд менеджером к котором прикреплены те или иные клиенты. Как сделать так, чтобы заказы распределялись между Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Поле для вариативного товара
Навигация
Рекомендации для васНавигацияOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.