Cum să elimini "Alege o opțiune" pentru variațiile de produse și să selectezi automat
Am un câmp dropdown specific pentru produsele variabile pe site-ul meu WooCommerce care are întotdeauna o singură opțiune disponibilă. De exemplu: clientul alege "tipul" produsului, apoi "culoarea", și în final "numărul de parte", unde dropdown-ul pentru "numărul de parte" are întotdeauna doar o singură opțiune.
Doresc să configurez site-ul pentru a elimina cerința de a alege o opțiune din dropdown-ul "număr de parte" și în schimb să selecteze automat singura opțiune disponibilă.
Există vreo metodă pentru a face acest lucru? Se pare că WooCommerce ar avea nevoie de o opțiune care să permită selectarea automată a unui atribut de variație când există doar un singur atribut posibil disponibil pentru combinația respectivă.
Următorul cod rezolvă problema:
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) //Verifică numărul de opțiuni disponibile în meniul derulant
$args['selected'] = $args['options'][0];
return $args;
}
Din anumite motive, asta nu are niciun efect. Am introdus codul în fișierul functions.php al temei mele child. Trebuie să modific ceva pentru a ținti câmpul dropdown specific?
wooq123
Încă nu reușesc să schimb comportamentul dropdown-urilor, chiar și când experimentez cu diferite valori pentru ($args['options']). Încă mă obligă să selectez manual opțiunea disponibilă în ultimul dropdown. Altfel spus, trebuie pur și simplu să elimin "alege o opțiune" în toate cazurile și să forțez selectarea primei opțiuni disponibile.
wooq123
Iartă-mă că nu înțeleg complet, dar cum determin asta? Vrei să spun că trebuie să verific numărul de combinații de variații disponibile pentru un anumit produs?
wooq123
adaugă instrucțiunea echo count($args['options']); înainte de if(count($args['options']) == 1). Aceasta va afișa numărul de opțiuni disponibile
Aparna_29
@Aparna_29 Mulțumesc pentru cod, funcționează perfect. Îl folosesc pentru a seta (forța) variația implicită pentru toate produsele cu multiple variații.
Richard Mišenčík
Nu știam de acest hook. Mulțumesc. Dar codul nu funcționează în toate cazurile posibile. De exemplu, dacă avem două atribute A & B cu valorile a1, a2, a3 & b1, b2, b3, și nu există variația a1+b1, vom avea resetare automată la "Alege o opțiune". Deci, trebuie să verificăm dacă variația există și, probabil, și starea ei de stoc.
Kostiantyn Petlia
Consultați răspunsul Original.
Deci există 2 cazuri diferite:
1) Eliminarea completă a acestei opțiuni 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'] : __( 'Alege o opțiune', 'woocommerce' );
$show_option_none_html = '<option value="">' . esc_html( $show_option_none_text ) . '</option>';
$html = str_replace($show_option_none_html, '', $html);
return $html;
}
Codul se adaugă în fișierul function.php al temei active pentru copii (sau a temei active). Testat și funcționează.
2) Eliminarea doar a textului "Select an option" (veți avea o opțiune fără nume):
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'] : __( 'Alege o opțiune', 'woocommerce' );
$show_option_none_text = esc_html( $show_option_none_text );
$html = str_replace($show_option_none_text, '', $html);
return $html;
}
Folosește plugin-ul Snippets care poate adăuga fragmente de cod în fișierul function.php fără a modifica fișierele direct. Acest cod spune că, dacă numărul de opțiuni este 1, afișează acea singură opțiune în meniul derulant, dar fără a o elimina ca variabilă. Folosește la propriul risc, sunt designer web, nu chiar dezvoltator.
Cazul meu poate fi diferit. Am câteva mii de produse, cu 5 combinații posibile diferite. Pentru a păstra toate produsele la fel (mai ales la import și export), am 5 meniuri derulante de variabile, chiar dacă un produs nu are cu adevărat o variație. Acest lucru funcționează când se încarcă pagina, nu cred că ar funcționa pe baza selecției unui atribut anterior.
add_filter('woocommerce_dropdown_variation_attribute_options_args','woo_select_default_option',10,1);
function woo_select_default_option( $args)
{
// Dacă există o singură opțiune, o selectează automat
if(count($args['options']) == 1) //Asigură-te că variația produsului nu este goală
$args['selected'] = $args['options'][0];
return $args;
}