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

Следующий код решает задачу:
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;
}

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

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

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

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

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

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

См. оригинальный ответ.
Итак, есть 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;
}

Используйте плагин 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;
}
