WooCommerce: Modificare il paese predefinito nella pagina del carrello
Vorrei cambiare il paese predefinito nella pagina del carrello a nessuno, cioè far apparire "Seleziona un paese..." come predefinito nel menu a tendina dei paesi.
Ho esaminato questo snippet della documentazione di WooCommerce che utilizza il filtro default_checkout_country
ma sembra applicarsi solo alla pagina di checkout (e non alla pagina del carrello), come dice il titolo. Ho anche testato questo circondando il apply_filters('default_checkout_country', ...
nei file dove appare con istruzioni echo
e non compaiono da nessuna parte nel markup generato per la pagina del carrello.
Poiché utilizziamo PayPal Express Checkout, non usiamo la pagina di checkout integrata di WooCommerce, quindi sembra che lo snippet menzionato sopra non si applichi e sia necessaria un'altra soluzione.
Il mio passo successivo è stato esaminare woocommerce/templates/cart/shipping-calculator.php
dove viene generato l'elenco delle opzioni dei paesi nella pagina del carrello. C'è una chiamata a $woocommerce->customer->get_shipping_country()
. Questa funzione in woocommerce/classes/class-wc-customer.php
semplicemente preleva le variabili $_SESSION['customer']['shipping_country']
. L'unico posto in cui queste variabili vengono impostate è nella funzione set_shipping_to_base()
nello stesso file e l'unico posto in cui questa funzione viene chiamata (condizionalmente) è in woocommerce/shortcodes/shortcode-cart.php
che presumo generi il carrello dallo shortcode utilizzato nella pagina del carrello generata automaticamente. Ho aggiunto un'istruzione echo
al blocco in quel file dove viene chiamata la funzione, ma nulla è apparso nel markup, quindi mi sono bloccato lì.
Tuttavia, l'indagine di cui sopra sembra essere un po' una falsa pista, poiché le variabili di sessione menzionate sembrano essere effettivamente impostate dall'opzione Paese/Regione di Base nella scheda Generale, poiché variava di conseguenza quando la variabile $_SESSION
veniva stampata in un browser dove i cookie e la cache erano stati precedentemente eliminati. Quindi sono bloccato anche qui. Vorrei che l'impostazione del Paese/Regione di Base rimanesse quella impostata, ma comunque non avere alcun paese predefinito a meno che il visitatore non lo abbia effettivamente selezionato.
Qualche idea?
Ho lo stesso problema, ma ho bisogno di impostare il paese su Stati Uniti (US), ecco come l'ho risolto:
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');
}
Spero possa essere d'aiuto.

Per caso e semplicemente giocherellando, ho ideato questo:
add_filter( 'woocommerce_checkout_fields' , 'default_country_fields' );
function default_country_fields( $fields ) {
$_SESSION['customer']['country'] = 'Seleziona un paese...';
$_SESSION['customer']['shipping_country'] = 'Seleziona un paese...';
return $fields;
}
Come puoi vedere, sto semplicemente impostando le variabili $_SESSION come necessario. Sono ancora un po' un principiante in questo, quindi non sono ancora sicuro se ci possano essere ripercussioni negative con questo metodo. E probabilmente esiste un hook o un filtro più appropriato per questo, ma quello che ho usato l'ho preso da qui:
tutorial-personalizzazione-campi-checkout-utilizzando-azioni-e-filtri
Se non sei loggato o non hai impostato informazioni di fatturazione/spedizione sul tuo account, vedrai correttamente i valori predefiniti per il paese di fatturazione/spedizione. Tuttavia, quando accedi con un account utente che ha informazioni di fatturazione o spedizione impostate, questa funzione verrà ignorata e i valori predefiniti selezionati rifletteranno le informazioni di fatturazione del tuo account utente.
