WooCommerce: Schimbă țara implicită pe pagina coșului
Doresc să schimb țara implicită pe pagina coșului la nicio valoare, adică să apară "Selectați o țară..." ca valoare implicită în lista derulantă de țări.
Am analizat acest fragment din documentația WooCommerce care utilizează filtru default_checkout_country
, dar se pare că se aplică doar paginii de finalizare comandă (și nu paginii coș), așa cum indică și titlul. Am testat acest lucru prin includerea apply_filters('default_checkout_country', ...
în fișierele unde apare cu instrucțiuni echo
și acestea nu apar nicăieri în markup-ul generat pentru pagina coș.
Deoarece folosim PayPal Express Checkout, nu utilizăm pagina de finalizare comandă integrată în WooCommerce, astfel încât fragmentul menționat mai sus nu se aplică și este necesară o altă soluție.
Următorul meu pas a fost să analizez woocommerce/templates/cart/shipping-calculator.php
unde este generată lista de țări pe pagina coș. Există un apel la $woocommerce->customer->get_shipping_country()
. Această funcție din woocommerce/classes/class-wc-customer.php
preia pur și simplu variabilele $_SESSION['customer']['shipping_country']
. Singurul loc unde aceste variabile sunt setate este în funcția set_shipping_to_base()
din același fișier, iar singurul loc unde această funcție este apelată (condiționat) este în woocommerce/shortcodes/shortcode-cart.php
care, presupun, generează coșul din shortcode-ul utilizat pe pagina coș generată automat. Am adăugat o instrucțiune echo
în blocul din acel fișier unde este apelată funcția, dar nu a apărut nimic în markup, așa că am rămas blocat acolo.
Investigarea de mai sus pare totuși să fie oarecum înșelătoare, deoarece variabilele de sesiune menționate mai sus par să fie setate de Țara/Regiunea de bază din setările din fila General, deoarece acestea variau corespunzător când variabila $_SESSION
era afișată într-un browser unde cookie-urile și cache-ul fuseseră șterse anterior. Așadar, sunt cam blocat și aici. Doresc ca setarea Țara/Regiunea de bază să rămână țara setată, dar totuși să nu existe o țară implicită decât dacă vizitatorul a selectat-o efectiv.
Idei?
Am aceeași problemă, dar trebuie să setez țara la SUA, iată cum am rezolvat-o:
add_action('woocommerce_add_to_cart' , 'set_country_befor_cart_page');
function set_country_befor_cart_page(){
WC()->customer->set_billing_country('US');
WC()->customer->set_shipping_country('US');
}
Sper că vă va fi de ajutor.

Din pură întâmplare și bâjbâind, am ajuns la această soluție:
add_filter( 'woocommerce_checkout_fields' , 'default_country_fields' );
function default_country_fields( $fields ) {
$_SESSION['customer']['country'] = 'Selectați o țară...';
$_SESSION['customer']['shipping_country'] = 'Selectați o țară...';
return $fields;
}
După cum puteți vedea, pur și simplu setez variabilele $_SESSION conform necesităților. Sunt cam începător în acest domeniu, așa că nu știu dacă există repercusiuni negative ale acestei metode. Probabil există și un hook sau filtru mai potrivit pentru asta, dar ceea ce am folosit l-am luat de aici:
ghid-personalizare-campuri-checkout-folosind-actiuni-si-filtre
Dacă nu sunteți autentificat sau nu aveți informații de facturare/transport setate în contul dvs., veți vedea corect valorile implicite pentru țara de facturare/transport. Totuși, când sunteți autentificat cu un cont de utilizator care are informații de facturare sau transport setate, această funcție va fi suprascrisă și valorile implicite selectate vor reflecta informațiile de facturare ale contului dvs.
