Удаление "Выберите вариант" для вариаций товара и автоматический выбор

19 нояб. 2018 г., 04:10:30
Просмотры: 13.6K
Голосов: 2

На моем сайте WooCommerce есть выпадающее поле для вариативных товаров, которое всегда содержит только один вариант. Например: покупатель выбирает "тип" товара, затем "цвет", и наконец "номер детали", где выпадающий список "номера детали" всегда содержит только один вариант.

Я хочу настроить сайт так, чтобы убрать требование выбора варианта из выпадающего списка "номера детали" и вместо этого автоматически выбирать единственный доступный вариант.

Есть ли способ это сделать? Похоже, WooCommerce нуждается в опции, которая позволит автоматически выбирать атрибут вариации, когда для комбинации доступен только один возможный атрибут.

0
Все ответы на вопрос 3
8

Следующий код решает задачу:

add_filter('woocommerce_dropdown_variation_attribute_options_args','fun_select_default_option',10,1);
function fun_select_default_option( $args)
{
    // Проверяем количество доступных вариантов в выпадающем списке
    if(count($args['options']) > 0)
        // Устанавливаем первый вариант как выбранный по умолчанию
        $args['selected'] = $args['options'][0];
    return $args;
}
19 нояб. 2018 г. 10:07:50
Комментарии

По какой-то причине это не дает никакого эффекта. Я вставил этот код в файл functions.php дочерней темы. Нужно ли что-то изменить, чтобы воздействовать именно на конкретное выпадающее поле?

wooq123 wooq123
19 нояб. 2018 г. 10:37:03

проверьте результат count($args['options'])

Aparna_29 Aparna_29
19 нояб. 2018 г. 11:24:28

Все равно не получается изменить поведение выпадающих списков, даже когда я экспериментирую с разными значениями для ($args['options']). По-прежнему требуется вручную выбирать доступный вариант в последнем выпадающем списке. Другими словами, мне просто нужно убрать "выберите вариант" во всех случаях и заставить его выбирать первый доступный вариант.

wooq123 wooq123
19 нояб. 2018 г. 11:38:12

Какое значение вы получите при выводе count($args['options'])?

Aparna_29 Aparna_29
19 нояб. 2018 г. 11:39:17

Прошу прощения, если я не совсем понял, но как мне это определить? Вы имеете в виду, что мне нужно проверить количество доступных комбинаций вариаций для конкретного товара?

wooq123 wooq123
19 нояб. 2018 г. 13:36:51

Добавьте строку echo count($args['options']); перед if(count($args['options']) == 1). Это выведет количество доступных вариантов

Aparna_29 Aparna_29
19 нояб. 2018 г. 13:38:10

@Aparna_29 Спасибо за код, он работает отлично. Я использую его, чтобы установить (принудительно) вариацию по умолчанию для всех товаров с множественными вариациями.

Richard Mišenčík Richard Mišenčík
18 янв. 2019 г. 11:49:18

Не знал об этом хуке. Спасибо. Но код не работает во всех возможных случаях. Например, если у нас есть два атрибута A и B со значениями a1, a2, a3 и b1, b2, b3, и при этом отсутствует вариация a1+b1, то произойдет автоматический сброс на "Выберите вариант". Поэтому нам нужно проверять, существует ли вариация и, возможно, ее статус наличия на складе.

Kostiantyn Petlia Kostiantyn Petlia
18 авг. 2021 г. 18:30:02
Показать остальные 3 комментариев
0

См. оригинальный ответ.

Итак, есть 2 разных случая:

1) Полное удаление этой html-опции**:

add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'filter_dropdown_option_html', 12, 2 );
function filter_dropdown_option_html( $html, $args ) {
    $show_option_none_text = $args['show_option_none'] ? $args['show_option_none'] : __( 'Choose an option', 'woocommerce' );
    $show_option_none_html = '<option value="">' . esc_html( $show_option_none_text ) . '</option>';

    $html = str_replace($show_option_none_html, '', $html);

    return $html;
}

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

2) Удалить только текст "Выберите опцию" (останется опция без названия):

add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'filter_dropdown_option_html', 12, 2 );
function filter_dropdown_option_html( $html, $args ) {
    $show_option_none_text = $args['show_option_none'] ? $args['show_option_none'] : __( 'Choose an option', 'woocommerce' );
    $show_option_none_text = esc_html( $show_option_none_text );

    $html = str_replace($show_option_none_text, '', $html);

    return $html;
}
23 апр. 2019 г. 08:47:49
0

Используйте плагин Snippets, который позволяет добавлять сниппеты в function.php без изменения файлов. Этот код проверяет, если количество вариантов равно 1, то показывает этот единственный вариант в выпадающем списке, не удаляя его как переменную. Используйте на свой страх и риск, я веб-дизайнер, а не разработчик.

Мой сценарий использования может отличаться. У меня несколько тысяч товаров с 5 возможными комбинациями. Чтобы все товары оставались одинаковыми (особенно при импорте и экспорте), я использую 5 выпадающих списков вариаций, даже если у товара нет реальных вариаций. Это работает при загрузке страницы, но не сработает при выборе предыдущего атрибута.

add_filter('woocommerce_dropdown_variation_attribute_options_args','woo_select_default_option',10,1);

function woo_select_default_option( $args)
{

    if(count($args['options']) == 1) //Убедимся, что вариация товара не пуста
        $args['selected'] = $args['options'][0];
    return $args;
}
3 июл. 2023 г. 02:29:32