@oaksaudio

Как в Woocommerce добавить произвольное поле в вариативный товар?

Всем привет!
Как добавить произвольное поле в вариативный товар и вывести его в content-product.php

С помощью ACF делаю так:
Создаю правило тип записи -> равно -> product_variation
Поле текст
И оно почему то в вариации не видно.
  • Вопрос задан
  • 4493 просмотра
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
Чего же вы все уцепились так в эти плагины для полей?
Использовать ACF и его аналоги это плохая практика, это очень плохая практика, это очень очень плохая практика.
И у WordPress и у WooCommerce есть соответствующее API

Для вариативного товара маленький простой код.
add_action( 'woocommerce_product_after_variable_attributes', 'cr_variable_fields', 10, 3 );
add_action( 'woocommerce_product_after_variable_attributes_js', 'cr_variable_fields_js' );
add_action( 'woocommerce_process_product_meta_variable', 'save_cr_variable_fields', 10, 1 );

/**
 * Создает новое поле
*/
function cr_variable_fields( $loop, $variation_data, $variation ) {
?>
	<tr>
		<td>
			<?php
			woocommerce_wp_text_input( 
				array( 
					'id'          => '_text_field['.$loop.']', 
					'label'       => __( 'Мое текстовое поле', 'woocommerce' ), 
					'placeholder' => __( 'Подсказка', 'woocommerce' ), 
					'desc_tip'    => 'true',
					'description' => __( 'Введите ваше значение.', 'woocommerce' ),
					'value'       => get_post_meta( $variation->ID, '_text_field', true )
				)
			);
			?>
		</td>
	</tr>
	
<?php
}

/**
 * Создает поле нового варианта
*/
function cr_variable_fields_js() {
?>
	<tr>
		<td>
			<?php
			woocommerce_wp_text_input( 
				array( 
					'id'          => '_text_field[ + loop + ]', 
					'label'       => __( 'Мое текстовое поле', 'woocommerce' ),  
					'placeholder' => __( 'Подсказка', 'woocommerce' ),
					'desc_tip'    => 'true',
					'description' => __( 'Введите ваше значение.', 'woocommerce' ),
					'value'       => ''
				)
			);
			?>
		</td>
	</tr>
<?php
}

/**
 * Сохраняет поле
*/
function save_cr_variable_fields( $post_id ) {
	if (isset( $_POST['variable_sku'] ) ) :
		$variable_sku          = $_POST['variable_sku'];
		$variable_post_id      = $_POST['variable_post_id'];
		
		$_text_field = $_POST['_text_field'];
		for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
			$variation_id = (int) $variable_post_id[$i];
			if ( isset( $_text_field[$i] ) ) {
				update_post_meta( $variation_id, '_text_field', stripslashes( $_text_field[$i] ) );
			}
		endfor;

	endif;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы