Произвольные поля к вариативным товарам Woocommerce

Произвольные поля к вариативным товарам Woocommerce

В прошлой статье я показал как добавить собственное поле к простому товару Woocommerce. В качестве примера мы добавили поле Штрихкод и разместили его после поля Артикул.

Это мы проделали с Простым товаром, а сейчас мы проделаем тоже самое, но только добавим поле Штрихкод к каждому варианту товара.

Т.е. мы будем работать с Вариативным товаром. Например мы продаем сухой корм для кошек, к одному виду корма бывает разный вес упаковки и соответственно разный штрихкод.

Создание поля Штрихкод для варианта товара

Чтобы добавить собственное поле к каждому варианту товара, добавим в файл functions.php нашей темы следующий код:


add_action( 'woocommerce_product_after_variable_attributes', 'shop_add_variable_custom_fields', 10, 3 );

function shop_add_variable_custom_fields( $loop, $variation_data, $variation ) {
    woocommerce_wp_text_input( array(
        'id'                => '_product_variable_barcode[' . $variation->ID . ']',
        'label'             => __( 'Штрихкод', 'woocommerce' ),
        'description'       => __( 'Введите штрихкод товара', 'woocommerce' ),
        'desc_tip'          => 'true', // Всплывающая подсказка
        'type'              => 'number', // Тип поля
        'custom_attributes' => array(),
        'value'             => get_post_meta( $variation->ID, '_product_variable_barcode', true ),
    ) );
}

Теперь поле Штрихкод должно появиться в каждом варианте товара. Чтобы убедиться в этом зайдем в Данные товара, далее на вкладку Вариации и теперь, если развернуть вариацию товара, внизу мы видим наше поле.

Добавление собственного поля к вариации товара в Woocommerce

Сохраняем значение поля

Далее нам нужно сохранить значение этого поля для варианта товара.

Для этой цели используем хук woocommerce_save_product_variation идем в файл functions.php нашей темы и добавляем:

add_action( 'woocommerce_save_product_variation', 'save_variation_barcode_custom_fields', 10, 2 );

function save_variation_barcode_custom_fields( $post_id ) {
    $woocommerce__product_variable_barcode = $_POST['_product_variable_barcode'][ $post_id ];
    if (isset($woocommerce__product_variable_barcode) && ! empty( $woocommerce__product_variable_barcode ) ) {
        update_post_meta( $post_id, '_product_variable_barcode', esc_attr( $woocommerce__product_variable_barcode ) );
    }
}

Вывод значения поля

Теперь осталось только вывести наш Штрихкод в карточке товара но только он должен быть разный, соответствующий варианту товара.

Идем в functions.php нашей темы и через хук woocommerce_available_variation добавляем значения нашего поля в общий массив вывода данных вариации товара.

add_filter( 'woocommerce_available_variation', 'load_variation_barcode_custom_fields' );

function load_variation_barcode_custom_fields( $variations ) {
    $variations_time = get_post_meta( $variations['variation_id'], '_product_variable_barcode', true );
    if ( isset( $variations_time ) && ! empty( $variations_time ) ) {
        $variations['_product_variable_barcode'] = '<div>';
        $variations['_product_variable_barcode'] .= '<span>Штрихкод: </span>';
        $variations['_product_variable_barcode'] .= get_post_meta( $variations['variation_id'], '_product_variable_barcode', true );
        $variations['_product_variable_barcode'] .= '</div>';
    }

    return $variations;
}

Теперь, для того чтобы вывести штрихкод на страницу описания товара, нужно подредактировать файл variation.php, который расположен по адресу /наша_тема/woocommerce/single-product/add-to-cart

Добавляем сюда внутрь <script></script> код:

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

Обновляем описание товара и видим наше поле Штрихкод, которое меняется, в зависимости от выбранного варианта.

Вывод дополнительного поля для вариативного товара

Хостинг для ваших проектов