选择“发货到不同地址”时,没有调用WooCommerce Advanced Shipping(WAS)条件

时间:2017-05-12 作者:Gasim

我和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 未调用筛选器。我在函数中添加了打印语句,它会在国家/地区更改时打印,但选中复选框时不会打印。原因是什么?这个问题能解决吗?

1 个回复
最合适的回答,由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\' );
(上面是非功能代码;从目前的情况来看,我相信这足以让您使用;-)

结束

相关推荐