禁用 WooCommerce 中特定送货区的 "Place order" 按钮
Disable "Place order" button for specific shipping zone in WooCommerce
如果选择了特定的发货 class,我将尝试停用 "Place order" 按钮。发货名称 class 是 "Zone 6"。
基于 "" 回答线程,我做了一些更改来处理运输区域:
add_filter('woocommerce_order_button_html', 'remove_order_button_html' );
function remove_order_button_html( $button ) {
// HERE define your targeted shipping zone
$targeted_shipping_zone = "Zone 6";
$found = false;
// Loop through cart items
foreach( WC_Shipping_Zones::get_zones() as $shipping_zone ) {
if( $shipping_zone['data']->get_zone_name() == $targeted_shipping_zone ) {
$found = true; // The targeted shipping class is found
break; // We stop the loop
}
}
// If found we remove the button
if( $found ) {
$style = 'style="background:Silver !important; color:white !important; cursor: not-allowed !important;"';
$button_text = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
$button = '<a class="button" '.$style.'>' . $button_text . '</a>';
}
return $button;
}
但是不行。当手动将 $found
设置为 true 时,按钮会根据需要停用。我认为 get_zone()
行中有错误。
感谢任何帮助。
在您的代码中,您没有获得选定的运输区域,您只是循环遍历每个现有的运输区域,因此您总是获得最后一个。这就是它不起作用的原因。
在下面您将获得正确选择的运输区域名称:
add_filter('woocommerce_order_button_html', 'disable_place_order_button_html' );
function disable_place_order_button_html( $button ) {
// HERE define your targeted shipping zone
$targeted_zone_name = "Zone 6";
// Get the chosen shipping method (if it exist)
$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping_method = reset($chosen_shipping_methods);
$chosen_shipping_method = explode(':', $chosen_shipping_method );
$chosen_shipping_zone = WC_Shipping_Zones::get_zone_by( 'instance_id', end($chosen_shipping_method) );
// If the targeted shipping zone is found, disable the button
if( $targeted_zone_name == $chosen_shipping_zone->get_zone_name() ) {
$style = 'style="background:Silver !important; color:white !important; cursor: not-allowed !important; text-align:center;"';
$text = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
$button = '<a class="button" '.$style.'>' . $text . '</a>';
}
return $button;
}
代码进入活动子主题(或活动主题)的 functions.php
文件。已测试并有效。
如果选择了特定的发货 class,我将尝试停用 "Place order" 按钮。发货名称 class 是 "Zone 6"。
基于 "
add_filter('woocommerce_order_button_html', 'remove_order_button_html' );
function remove_order_button_html( $button ) {
// HERE define your targeted shipping zone
$targeted_shipping_zone = "Zone 6";
$found = false;
// Loop through cart items
foreach( WC_Shipping_Zones::get_zones() as $shipping_zone ) {
if( $shipping_zone['data']->get_zone_name() == $targeted_shipping_zone ) {
$found = true; // The targeted shipping class is found
break; // We stop the loop
}
}
// If found we remove the button
if( $found ) {
$style = 'style="background:Silver !important; color:white !important; cursor: not-allowed !important;"';
$button_text = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
$button = '<a class="button" '.$style.'>' . $button_text . '</a>';
}
return $button;
}
但是不行。当手动将 $found
设置为 true 时,按钮会根据需要停用。我认为 get_zone()
行中有错误。
感谢任何帮助。
在您的代码中,您没有获得选定的运输区域,您只是循环遍历每个现有的运输区域,因此您总是获得最后一个。这就是它不起作用的原因。
在下面您将获得正确选择的运输区域名称:
add_filter('woocommerce_order_button_html', 'disable_place_order_button_html' );
function disable_place_order_button_html( $button ) {
// HERE define your targeted shipping zone
$targeted_zone_name = "Zone 6";
// Get the chosen shipping method (if it exist)
$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping_method = reset($chosen_shipping_methods);
$chosen_shipping_method = explode(':', $chosen_shipping_method );
$chosen_shipping_zone = WC_Shipping_Zones::get_zone_by( 'instance_id', end($chosen_shipping_method) );
// If the targeted shipping zone is found, disable the button
if( $targeted_zone_name == $chosen_shipping_zone->get_zone_name() ) {
$style = 'style="background:Silver !important; color:white !important; cursor: not-allowed !important; text-align:center;"';
$text = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
$button = '<a class="button" '.$style.'>' . $text . '</a>';
}
return $button;
}
代码进入活动子主题(或活动主题)的 functions.php
文件。已测试并有效。