我和Woocommerce的情况很奇怪。我有一个使用WAS创建的发货方法,如果“发货到其他地址”,我的客户希望删除该方法所以,我创造了一个条件,就是这样。以下是源代码:
function was_conditions_add_ship_to_different_address( $conditions ) {
$conditions[\'General\'][\'ship_to_different_address\'] = __( \'Ship to different address\', \'durhone-two\' );
return $conditions;
}
function was_values_add_ship_to_different_address( $values, $condition ) {
if ( \'ship_to_different_address\' === $condition ) {
$values[\'field\'] = \'select\';
$values[\'options\'][0] = __( \'No\' );
$values[\'options\'][1] = __( \'Yes\' );
}
return $values;
}
function was_match_condition_ship_to_different_address( $match, $operator, $value, $package ) {
$value_int = (int) $value;
$ship_to_different_address = 0;
if ( $_POST[\'post_data\'] ) {
parse_str( $_POST[\'post_data\'], $post_data );
if ( isset( $post_data[\'ship_to_different_address\'] ) ) {
$ship_to_different_address = (int) $post_data[\'ship_to_different_address\'];
}
}
$match = $value_int === $ship_to_different_address;
return $match;
}
add_filter( \'was_conditions\', \'was_conditions_add_ship_to_different_address\', 10, 1 );
add_filter( \'was_values\', \'was_values_add_ship_to_different_address\', 10, 2 );
add_filter( \'was_match_condition_ship_to_different_address\', \'was_match_condition_ship_to_different_address\', 10, 4 );
问题是,当我选中“ship to different address”(发货至不同地址)复选框时,请求
/checkout?wc-ajax=update_order_review
就像当我改变乡村领域一样。然而
was_match_condition_ship_to_different_address
未调用筛选器。我在函数中添加了打印语句,它会在国家/地区更改时打印,但选中复选框时不会打印。原因是什么?这个问题能解决吗?
最合适的回答,由SO网友:Sormano 整理而成
你的代码很好,不应该成为问题(只要运费是有效的/发布的,并且有条件)。
我认为这与运输缓存有关;如果目的地没有任何变化,WC不会重新计算运费(因此账单将与发货地址相同)。
您可以在WC 3.0之后的“装运”设置下启用装运调试模式,然后在“系统状态”>“工具”下启用装运调试模式来测试这一点。
如果这样做有效,它现在正在调用函数;通过将复选框的值添加到发货包中,可以完全解决此问题。
function custom_add_package_var( $package ) {
$package[\'destination\'][\'ship_to_diff_address\'] = $my_var;
return $package;
}
add_filter( \'woocommerce_cart_shipping_packages\', \'custom_add_package_var\' );
(上面是非功能代码;从目前的情况来看,我相信这足以让您使用;-)