Какой хук поможет вывести поле рядом со SCU?

Ссылка скопирована
1 ответ

Подскажите хук, позволяющий вывести кастомное поле в вариации вариативного товара рядом со SCU. Перед ним или после - не важно.

Максимально близко что нашлось это woocommerce_variation_options, который выводит после чекбоксов (перед ценами).
Но хотелось бы рядом со SCU

Какой хук поможет вывести поле рядом со SCU?

Дополнительно:

Можно вывести, грубо говоря, где попало, а затем при помощи javascript спозиционировать в нужное место.

Я так двигал доп.поля профиля юзера. Всего одна строка, типа такой:

jQuery('.user-position-wrap').prependTo(jQuery('.user-description-wrap').parents('table'));

jQuery('.user-position-wrap').prependTo(jQuery('.user-description-wrap').parents('table'));

  • YBB, спасибо за вариант, но подожду, может всё же найдется хук. Не хочется раздувать плаг ещё и js (тем более что я его знаю весьма поверхностно)
  • Ответы:

    Чтобы вывести поле рядом с SKU в WordPress, можно использовать хук `woocommerce_product_options_sku`.

    Пример кода для добавления поля:

    // Определение хука и функции обратного вызова function custom_product_sku_field() {     global $post;      // Вывод поля рядом со SKU     woocommerce_wp_text_input(         array(             'id' => '_custom_sku',             'label' => __( 'Custom SKU', 'woocommerce' ),             'placeholder' => '',             'desc_tip' => 'true',             'description' => __( 'Optional custom SKU for the product', 'woocommerce' ),             'value' => get_post_meta( $post->ID, '_custom_sku', true )         )     ); } add_action( 'woocommerce_product_options_sku', 'custom_product_sku_field' );   // Сохранение значения поля на странице товара function custom_product_sku_field_save( $post_id ) {     $custom_sku = $_POST['_custom_sku'];     if ( ! empty( $custom_sku ) ) {         update_post_meta( $post_id, '_custom_sku', esc_attr( $custom_sku ) );     } } add_action( 'woocommerce_process_product_meta', 'custom_product_sku_field_save' );

    // Определение хука и функции обратного вызова function custom_product_sku_field() { global $post; // Вывод поля рядом со SKU woocommerce_wp_text_input( array( 'id' => '_custom_sku', 'label' => __( 'Custom SKU', 'woocommerce' ), 'placeholder' => '', 'desc_tip' => 'true', 'description' => __( 'Optional custom SKU for the product', 'woocommerce' ), 'value' => get_post_meta( $post->ID, '_custom_sku', true ) ) ); } add_action( 'woocommerce_product_options_sku', 'custom_product_sku_field' ); // Сохранение значения поля на странице товара function custom_product_sku_field_save( $post_id ) { $custom_sku = $_POST['_custom_sku']; if ( ! empty( $custom_sku ) ) { update_post_meta( $post_id, '_custom_sku', esc_attr( $custom_sku ) ); } } add_action( 'woocommerce_process_product_meta', 'custom_product_sku_field_save' );

    После добавления этого кода в файл `functions.php` вашей темы, в админ-панели WordPress на странице редактирования товара вы увидите новое поле рядом со SKU, где сможете ввести нужное значение.
    Спонсировано ChatGPT.

    • Лучше удали нафик эту бестолковую генерёнку, не имеющую отношения к вопросу.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Редакция по БД Ответ

    Для вывода кастомного поля рядом со SKU в вариации WooCommerce лучше использовать хуки админки вариаций. Хук woocommerce_variation_options действительно выводит поле рядом с блоком опций вариации, но если нужно ближе к SKU, чаще используют woocommerce_product_after_variable_attributes или вывод через JS/CSS внутри блока вариации.

    Пример поля в каждой вариации:

    add_action('woocommerce_product_after_variable_attributes', function ($loop, $variation_data, $variation) {
        woocommerce_wp_text_input([
            'id' => "custom_code_{$loop}",
            'name' => "custom_code[{$loop}]",
            'label' => 'Кастомное поле',
            'value' => get_post_meta($variation->ID, '_custom_code', true),
            'wrapper_class' => 'form-row form-row-first',
        ]);
    }, 10, 3);

    add_action('woocommerce_product_after_variable_attributes', function ($loop, $variation_data, $variation) { woocommerce_wp_text_input([ 'id' => "custom_code_{$loop}", 'name' => "custom_code[{$loop}]", 'label' => 'Кастомное поле', 'value' => get_post_meta($variation->ID, '_custom_code', true), 'wrapper_class' => 'form-row form-row-first', ]); }, 10, 3);

    Сохранение:

    add_action('woocommerce_save_product_variation', function ($variation_id, $i) {
        if (isset($_POST['custom_code'][$i])) {
            update_post_meta(
                $variation_id,
                '_custom_code',
                sanitize_text_field(wp_unslash($_POST['custom_code'][$i]))
            );
        }
    }, 10, 2);

    add_action('woocommerce_save_product_variation', function ($variation_id, $i) { if (isset($_POST['custom_code'][$i])) { update_post_meta( $variation_id, '_custom_code', sanitize_text_field(wp_unslash($_POST['custom_code'][$i])) ); } }, 10, 2);

    Если поле должно быть прямо визуально рядом со SKU, можно задать wrapper_class и немного CSS в админке, но не ломайте структуру WooCommerce. Поля вариации там уже сгруппированы, и слишком агрессивное перемещение может сломаться после обновления.

    Если нужно вывести поле перед SKU, штатного “идеального” хука может не быть. Тогда можно использовать ближайший хук и CSS Grid/Flex, либо переопределять JS-шаблон вариаций, но это уже рискованнее.

    Для фронта это поле можно получить из meta вариации или добавить в JSON вариаций через woocommerce_available_variation.

    Итог: для админки вариаций используйте woocommerce_product_after_variable_attributes + woocommerce_save_product_variation. Это стабильнее, чем править шаблоны WooCommerce или вставлять поле через jQuery после загрузки.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно