我正在努力更改默认选择的运输选项。仅当客户购物车中的金额超过 70 美元以上时,才会显示“免运费”运输选项。如果购物车中的金额低于 70 美元,运输选项将不会显示在运输选项中。
如果客户的金额超过 70 美元或以上,则会显示“免运费”选项,并且它应该是默认选择的运输选项。
我尝试添加以下代码片段,但它似乎对我不起作用,或者修改 ID 时可能出现错误(不确定)。
add_action( 'woocommerce_before_cart', 'set_default_chosen_shipping_method', 5 );
function set_default_chosen_shipping_method(){
//
if( count( WC()->session->get('shipping_method_0')['rates'] ) > 0 ){
foreach( WC()->session->get('shipping_method_0')['rates'] as $rate_id =>$rate)
if($rate->method_id == 'free_shipping30'){
$default_rate_id = array( $rate_id );
break;
}
WC()->session->set('chosen_shipping_methods', $default_rate_id );
}
}
我得到了这个片段的想法这里
提前谢谢您!!
您的代码包含一些错误
WC()->session->get('shipping_method_0')['rates']
替换为 WC()->session->get( 'shipping_for_package_0')['rates']
if($rate->method_id == 'free_shipping30'){
替换为 if ( $rate->method_id == 'free_shipping' ) {
所以你得到:
function action_woocommerce_before_cart() {
// NOT empty (get)
if ( count( WC()->session->get( 'shipping_for_package_0')['rates'] ) > 0 ) {
// Loop through
foreach ( WC()->session->get('shipping_for_package_0')['rates'] as $rate_id => $rate ) {
// For free shipping
if ( $rate->method_id == 'free_shipping' ) {
$default_rate_id = array( $rate_id );
break;
}
}
// Set
WC()->session->set( 'chosen_shipping_methods', $default_rate_id );
}
}
add_action( 'woocommerce_before_cart', 'action_woocommerce_before_cart', 10, 0 );
@7uc1f3r 给出的答案确实会取消选择免费送货(如果有),但如果没有免费送货,也会取消选择其他默认送货方式*,从而导致没有选择送货方式。
如果有有可用的免费送货方式,以下内容只会影响默认送货方式。
function select_free_shipping_by_default()
{
if ($rates = WC()->session->get('shipping_for_package_0')['rates']) {
foreach ($rates as $rate_id => $rate) {
if ($rate->method_id == 'free_shipping') {
WC()->session->set('chosen_shipping_methods', array($rate_id));
break;
}
}
}
}
add_action('woocommerce_before_cart', 'select_free_shipping_by_default', 10, 0);
根据您的审美,您也可以在不使用
foreach
循环的情况下完成此操作,尽管我承认这可能不太清晰(并且需要 PHP 7.4+ 来实现箭头功能)。
function select_free_shipping_by_default()
{
if ($rates = WC()->session->get('shipping_for_package_0')['rates']) {
if ($free = array_filter($rates, fn ($x) => $x->method_id == 'free_shipping')) {
WC()->session->set('chosen_shipping_methods', array_keys($free));
}
}
}
add_action('woocommerce_before_cart', 'select_free_shipping_by_default', 10, 0);
测试于:WooComerce 8.3.1 | WordPress 6.4.3 | PHP 8.1.23
希望这对某人有帮助:)
* 默认选择的运输方式通常在管理员中配置。默认情况下会选择相关运输区域中运输方式拖/放顺序中的第一项(例如位于
/wp-admin/admin.php?page=wc-settings&tab=shipping&zone_id=1
)。