WooCommerce: Изменение страны по умолчанию на странице корзины
Я хочу изменить страну по умолчанию на странице корзины на отсутствующую, чтобы в выпадающем списке стран по умолчанию отображалось "Выберите страну…".
Я изучил этот сниппет из документации WooCommerce, который использует фильтр default_checkout_country
, но он применяется только к странице оформления заказа (а не к странице корзины), как и указано в его названии. Я также проверил это, окружив apply_filters('default_checkout_country', ...
в файлах, где они встречаются, операторами echo
, и они не появляются в сгенерированной разметке для страницы корзины.
Поскольку мы используем PayPal Express Checkout, мы не используем встроенную страницу оформления заказа WooCommerce, поэтому кажется, что упомянутый сниппет не подходит, и требуется другое решение.
Следующим шагом я изучил woocommerce/templates/cart/shipping-calculator.php
, где генерируется список стран на странице корзины. Там есть вызов $woocommerce->customer->get_shipping_country()
. Эта функция в woocommerce/classes/class-wc-customer.php
просто получает переменные $_SESSION['customer']['shipping_country']
. Единственное место, где эти переменные устанавливаются, — это функция set_shipping_to_base()
в том же файле, и единственное место, где эта функция вызывается (условно), — это woocommerce/shortcodes/shortcode-cart.php
, который, как я предполагаю, генерирует корзину из шорткода, используемого на автоматически созданной странице корзины. Я добавил оператор echo
в блок в этом файле, где вызывается эта функция, но ничего не появилось в разметке, поэтому я застрял.
Однако это исследование кажется несколько ложным следом, так как упомянутые переменные сессии, похоже, на самом деле устанавливаются настройкой Страна/Регион по умолчанию на вкладке "Общие", поскольку они менялись соответствующим образом, когда переменная $_SESSION
выводилась в браузере, где куки и кеш были предварительно удалены. Поэтому я снова застрял. Я хочу, чтобы настройка Страна/Регион по умолчанию оставалась установленной, но при этом не было страны по умолчанию, если посетитель её явно не выбрал.
Есть идеи?
У меня такая же проблема, но нужно установить страну на США, вот как я это исправил:
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');
}
Надеюсь, это поможет.

Случайно и просто экспериментируя, я пришёл к такому решению:
add_filter( 'woocommerce_checkout_fields' , 'default_country_fields' );
function default_country_fields( $fields ) {
$_SESSION['customer']['country'] = 'Выберите страну...';
$_SESSION['customer']['shipping_country'] = 'Выберите страну...';
return $fields;
}
Как видите, я просто устанавливаю переменные $_SESSION по мере необходимости. Я ещё новичок в этом, поэтому пока не знаю, есть ли у этого метода какие-то негативные последствия. И, вероятно, для этого есть более подходящий хук или фильтр, но тот, что я использовал, я взял отсюда:
руководство-по-настройке-полей-оформления-заказа-с-использованием-экшенов-и-фильтров
Если вы не авторизованы или у вас не указана информация для выставления счёта/доставки, вы увидите значения по умолчанию для страны выставления счёта/доставки. Однако при входе в учётную запись пользователя, у которой указана информация для выставления счёта или доставки, эта функция будет переопределена, и значения по умолчанию будут соответствовать информации для выставления счёта в вашей учётной записи.
