Вопрос или проблема
Я хотел создать пользовательские поля для ввода текста с уже заданным атрибутом для продуктов. Поскольку это невозможно сделать нативно в Woocommerce, я добавил пользовательское поле для ввода текста для одного из моих атрибутов “Forgaffel”. Эта информация должна отображаться на вкладке “Дополнительная информация” на странице продукта вместе с другими атрибутами продукта.
Я использовал следующий код для этого:
* Добавить пользовательское текстовое поле
**/
function my_woo_custom_price_field() {
$field = array(
'id' => 'christmas_price',
'label' => __( 'Forgaffel', 'textdomain' ),
'data_type' => 'text' //Позволим WooCommerce форматировать наше поле как поле цены
);
woocommerce_wp_text_input( $field );
}
/**
* Сохранить пользовательское текстовое поле
**/
add_action( 'woocommerce_process_product_meta', 'save_custom_field' );
function save_custom_field( $post_id ) {
$custom_field_value = isset( $_POST['my_custom_input'] ) ? $_POST['my_custom_input'] : '';
$product = wc_get_product( $post_id );
$product->update_meta_data( 'my_custom_input', $custom_field_value );
$product->save();
}
Тем не менее, как мне получить эту информацию и отобразить ее на вкладке “Дополнительная информация”? Я использую тему WP Ocean.
И есть ли более простой способ добавить пользовательские текстовые поля (с уже предопределенным именем атрибута) для информации на вкладке “Дополнительная информация”?
Спасибо заранее!
Мне удалось достичь этого, используя ACF и редактируя файл “product-attributes.php” в плагине woocommerce.
Ответ или решение
Для добавления пользовательских полей ввода текста для атрибутов в бэкенде WooCommerce, вы действительно можете использовать тот подход, который уже был использован вами в коде. Тем не менее, чтобы успешно отображать эти пользовательские поля под вкладкой "Дополнительная информация", необходимо выполнить несколько дополнительных шагов. Я также предложу более простой способ, используя плагин Advanced Custom Fields (ACF), как вы упомянули в своем вопросе.
Шаг 1: Добавление пользовательского текстового поля
Вы уже добавили текстовое поле для атрибута “Forgaffel” следующим кодом:
function my_woo_custom_price_field() {
$field = array(
'id' => 'my_custom_input',
'label' => __( 'Forgaffel', 'textdomain' ),
'data_type' => 'text',
);
woocommerce_wp_text_input( $field );
}
add_action( 'woocommerce_product_options_general_product_data', 'my_woo_custom_price_field' );
function save_custom_field( $post_id ) {
$custom_field_value = isset( $_POST['my_custom_input'] ) ? $_POST['my_custom_input'] : '';
$product = wc_get_product( $post_id );
$product->update_meta_data( 'my_custom_input', sanitize_text_field( $custom_field_value ) );
$product->save();
}
add_action( 'woocommerce_process_product_meta', 'save_custom_field' );
Шаг 2: Отображение поля в вкладке "Дополнительная информация"
Чтобы отобразить это пользовательское поле на странице продукта, вам нужно добавить следующий код в файл вашей темы functions.php
:
add_filter( 'woocommerce_display_product_attributes', 'custom_display_product_attributes', 10, 2 );
function custom_display_product_attributes( $product_attributes, $product ) {
$custom_input_value = $product->get_meta( 'my_custom_input' );
if ( ! empty( $custom_input_value ) ) {
$product_attributes['Forgaffel'] = esc_html( $custom_input_value );
}
return $product_attributes;
}
Этот код добавляет значение вашего пользовательского поля в общий массив атрибутов продукта, который будет отображен под вкладкой "Дополнительная информация".
Упрощение процесса с использованием ACF
Если вы хотите упростить этот процесс, рекомендуется использовать плагин Advanced Custom Fields (ACF), который позволяет легко создавать и настраивать поля без написания кода. Вот краткое руководство по использованию ACF для этой задачи:
- Установите и активируйте плагин ACF.
- Создайте группу полей:
- Перейдите в ACF > Поля и создайте новую группу.
- Добавьте текстовое поле для "Forgaffel".
- Убедитесь, что группа полей отображается на страницах продукта (выберите "Post Type" и установите "Рубрика" на "Продукты").
-
Выведите поле в шаблон:
В файлеwoocommerce/single-product/tabs/additional-information.php
добавьте следующий код:$forgaffel_value = get_field( 'forgaffel' ); // Убедитесь, что ваш текстовый идентификатор совпадает с тем, что вы указали в ACF. if ( $forgaffel_value ) { echo '<tr class="forgaffel"><th>' . __( 'Forgaffel', 'textdomain' ) . '</th><td>' . esc_html( $forgaffel_value ) . '</td></tr>'; }
Заключение
Теперь вы успешно добавили пользовательские текстовые поля для атрибутов в WooCommerce и обеспечили их отображение в разделе "Дополнительная информация". Использование ACF позволяет вам управлять пользовательскими полями более интуитивно и визуально, что может значительно упростить задачи при добавлении и изменении содержимого вашего интернет-магазина.