Дополнительные настраиваемые параметры для продуктов в Woocommerce

У меня есть товары со следующими параметрами размера:

  • Длина (стандарт Woocomerce)
  • Ширина (стандарт Woocomerce)
  • Высота (стандарт Woocomerce)
  • Диаметр
  • Толщина
  • Схема

На странице редактирования продукта у меня есть только длина, ширина, высота (стандарт Woocomerce).

Я хочу добавить свой другие параметры размеров

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

Для этого есть какой-нибудь фильтр?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
4 737
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать для этого Настраиваемые поля или атрибуты продукта.

Ответ принят как подходящий

Есть несколько способов…

1) Использование атрибутов продукта: (без необходимости кодирования):

  • Вы должны создать 3 новых атрибута продукта (по одному отсутствующему измерению).

  • Вы должны установить каждый из них в каждом продукте с правильными параметрами (отображаемыми в параметрах продуктов) и значениями.

Преимущество: Эти другие атрибуты размеров будут отображаться на страницах продуктов.

Недостатки:

  • Каждый атрибут должен быть установлен для каждого продукта, и каждое значение будет термином этого атрибута продукта.
  • Не существует конкретных существующих методов WC_Product для получения таких настраиваемых атрибутов продукта, как атрибуты измерения по умолчанию. Так что вывести их за пределы страницы продукта будет сложнее.

2) Используя поля пользовательских настроек:

// Add custom fields to product shipping tab
add_action( 'woocommerce_product_options_dimensions', 'add_product_options_other_dimensions');
function add_product_options_other_dimensions(){
    global $product_object;

    $product_id = method_exists( $product_object, 'get_id' ) ? $product_object->get_id() : $product_object->id;

    echo '</div><div class = "options_group">'; // New option group

    woocommerce_wp_text_input( array(
        'id'          => '_diameter',
        'label'       => __( 'Diameter', 'woocommerce' ),
        'desc_tip'    => 'true',
        'description' => __( 'Diameter description help.', 'woocommerce' )
    ) );

    woocommerce_wp_text_input( array(
        'id'          => '_thickness',
        'label'       => __( 'Thickness', 'woocommerce' ),
        'desc_tip'    => 'true',
        'description' => __( 'Thickness description help.', 'woocommerce' )
    ) );

    woocommerce_wp_text_input( array(
        'id'          => '_circuit',
        'label'       => __( 'Circuit', 'woocommerce' ),
        'desc_tip'    => 'true',
        'description' => __( 'Circuit description help.', 'woocommerce' )
    ) );

}

// Save the custom fields values as meta data
add_action( 'woocommerce_process_product_meta', 'save_product_options_other_dimensions' );
function save_product_options_other_dimensions( $post_id ){

    if ( isset( $_POST['_diameter'] ) )
        update_post_meta( $post_id, '_diameter', esc_attr( $_POST['_diameter'] ) );

    if ( isset( $_POST['_thickness'] ) )
        update_post_meta( $post_id, '_thickness', esc_attr( $_POST['_thickness'] ) );

    if ( isset( $_POST['_circuit'] ) )
        update_post_meta( $post_id, '_circuit', esc_attr( $_POST['_circuit'] ) );

}

// Add custom fields to product variation settings
add_action( 'woocommerce_product_after_variable_attributes','add_variation_options_other_dimensions', 10, 3 );
function add_variation_options_other_dimensions( $loop, $variation_data, $variation ){

    $variation_diameter = get_post_meta($variation->ID,"_diameter", true );
    if ( ! $variation_diameter ) $variation_diameter = "";

    $variation_thickness = get_post_meta($variation->ID,"_thickness", true );
    if ( ! $variation_thickness ) $variation_thickness = "";

    $variation_circuit = get_post_meta($variation->ID,"_circuit", true );
    if ( ! $variation_circuit ) $variation_circuit = "";

    echo '<p class = "form-field dimensions_field">';

    woocommerce_wp_text_input( array(
        'id'          => '_diameter' . '_' . $loop,
        'label'       => __( 'Diameter', 'woocommerce' ),
        'desc_tip'    => 'true',
        'description' => __( 'Diameter description help.', 'woocommerce' ),
        'value'       => $variation_diameter
    ) );

    woocommerce_wp_text_input( array(
        'id'          => '_thickness' . '_' . $loop,
        'label'       => __( 'Thickness', 'woocommerce' ),
        'desc_tip'    => 'true',
        'description' => __( 'Thickness description help.', 'woocommerce' ),
        'value'       => $variation_thickness
    ) );

    woocommerce_wp_text_input( array(
        'id'          => '_circuit' . '_' . $loop,
        'label'       => __( 'Circuit', 'woocommerce' ),
        'desc_tip'    => 'true',
        'description' => __( 'Circuit description help.', 'woocommerce' ),
        'value'       => $variation_circuit
    ) );

    echo '</p>';
}


// Save product variation custom fields values
add_action( 'woocommerce_save_product_variation','save_variation_options_other_dimensions', 10 ,2 );
function save_variation_options_other_dimensions( $variation_id, $loop ){

    $built_lenght = $_POST["_diameter_$loop"];
    if ( isset($built_lenght) )
        update_post_meta( $variation_id, '_built_lenght', esc_attr($built_lenght) );

    $built_width = $_POST["_thickness_$loop"];
    if ( isset($built_width) )
        update_post_meta( $variation_id, '_built_width', esc_attr($built_width) );

    $built_height = $_POST["_circuit_$loop"];
    if ( isset($built_height) )
        update_post_meta( $variation_id, '_built_height', esc_attr($built_height) );
}

Этот код находится в файле function.php вашей активной дочерней темы (или темы).

Вы получите это для продуктов:

И это для вариаций товаров (в настройках вариаций вариативных товаров):

Теперь, чтобы отобразить и получить эти значения, вам потребуется переопределить шаблон woocommerce через вашу тему, как описано в этой документации.

Файл, который нужно скопировать и переопределить с помощью вашей темы: шаблон single-product/product-attributes.php.

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

Для вывода правильных значений вы будете использовать функцию get_post_meta().

Например, чтобы отобразить значение diameter, вы будете использовать:

<?php echo get_post_meta( $product->get_id(), '_diameter', true ); ?>

Привет, @LoicTheAztec, есть ли способ, которым они могут действовать как атрибуты Woocommerce? Я имею ввиду использовать их для фильтрации? или даже ссылку включили с собой? потому что, как я видел, они перешли к таблице wp_postmeta, а не wp_woocommerce_attribute_taxonomies

Babak Habibi 15.04.2019 14:05

Другие вопросы по теме