Как добавить пользовательские текстовые поля для атрибутов в заднем плане?

Вопрос или проблема

Я хотел создать пользовательские поля для ввода текста с уже заданным атрибутом для продуктов. Поскольку это невозможно сделать нативно в 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 для этой задачи:

  1. Установите и активируйте плагин ACF.
  2. Создайте группу полей:
    • Перейдите в ACF > Поля и создайте новую группу.
    • Добавьте текстовое поле для "Forgaffel".
    • Убедитесь, что группа полей отображается на страницах продукта (выберите "Post Type" и установите "Рубрика" на "Продукты").
  3. Выведите поле в шаблон:
    В файле 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 позволяет вам управлять пользовательскими полями более интуитивно и визуально, что может значительно упростить задачи при добавлении и изменении содержимого вашего интернет-магазина.

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

Капча загружается...