我想更改cart 页面设置为“无”,即“选择国家…”在国家下拉列表中显示为默认值。
我已经看过了this WooCommerce Docs snippet 使用default_checkout_country
filter 但它似乎只适用于checkout 第页(而不是cart 页面),正如标题所示。我还通过围绕apply_filters(\'default_checkout_country\', ...
在显示它们的文件中echo
语句,它们不会出现在为cart 页
由于我们使用的是PayPal Express结账,所以我们没有使用WooCommerce内置的结账页面,因此上述代码片段似乎不适用,需要另一种解决方案。
我的下一步是调查woocommerce/templates/cart/shipping-calculator.php
其中,在cart 页有人打电话到$woocommerce->customer->get_shipping_country()
. 中的功能woocommerce/classes/class-wc-customer.php
只需拿起$_SESSION[\'customer\'][\'shipping_country\']
变量。设置这些变量的唯一位置是在函数中set_shipping_to_base()
在同一个文件中,唯一(有条件地)调用该函数的位置是woocommerce/shortcodes/shortcode-cart.php
我想这会产生cart 从shortcode 用于自动生成的cart 页我添加了一个echo
语句到该文件中调用该函数的块,但标记中没有显示任何内容,因此我陷入了困境。
然而,上述调查似乎有点像转移视线,因为上述会话变量似乎实际上是由Base Country/Region 设置,因为当$_SESSION
变量已在浏览器中打印,其中Cookie和缓存先前已被删除。所以我也被困在这里了。我想要Base Country/Region 设置为保留国家设置,但仍然没有默认国家,除非访问者实际选择了它。
有什么想法吗?
SO网友:mroncetwice
我偶然想到了这个:
add_filter( \'woocommerce_checkout_fields\' , \'default_country_fields\' );
function default_country_fields( $fields ) {
$_SESSION[\'customer\'][\'country\'] = \'Select a country...\';
$_SESSION[\'customer\'][\'shipping_country\'] = \'Select a country...\';
return $fields;
}
如您所见,我只是根据需要设置$\\u会话变量。我在这方面有点像n00b,所以我还不知道这种方法是否有任何负面影响。可能有一个更合适的钩子或过滤器,但我使用的是从这里得到的:
tutorial-customising-checkout-fields-using-actions-and-filters
如果您未登录或帐户中未设置帐单/发货信息,您将正确看到帐单/发货国家/地区的默认值。但是,当使用设置了帐单或发货信息的用户帐户登录时,此功能将被覆盖,并且所选的默认值将反映您的用户帐户帐单信息。