检查 "Ship to different address" 是否已在 Woocommerce 中检查

Check if "Ship to different address" has been checked in Woocommerce

在 WwooCommerce 中,我试图在我的管理员电子邮件中添加发货到不同的地址信息。

我如何检查是否选中了从结帐页面运送到不同地址的复选框?

我尝试使用:

$ship_to_different_address = get_option( 'woocommerce_ship_to_destination' ) === 'shipping' ? 1 : 0;

if($ship_to_different_address == 1):
 //the additional email text here
endif;

但这似乎不起作用。有任何想法吗?

啊..我们可以检查是否设置了$_POST['ship_to_different_address']..

可能最好的方法是模拟它比较订单的帐单和送货地址。在大多数可用的相关电子邮件通知挂钩中,$order 对象作为参数包含在内。

这是一个在 woocommerce_email_order_details 动作挂钩中挂钩此函数的示例,根据它会显示不同的内容:

add_action( 'woocommerce_email_order_details', 'custom_content_email_order_details', 10, 4 );
function custom_content_email_order_details( $order, $sent_to_admin, $plain_text, $email ){
    // Only for "New Order" and admin email notification
    if ( 'new_order' != $email->id && ! $sent_to_admin ) return;

    // Displaying something related
    if( $order->get_billing_address_1() != $order->get_shipping_address_1() ) {
        echo '<p style="color:red;">Different billing and shipping addresses<p>';
    } else {
        echo '<p style="color:green;">Same billing and shipping addresses<p>';
    }
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

此代码已在 WooCommerce 3.1+ 中测试并有效

You can also use (with different priorities) any of the following hooks in this code:
- woocommerce_email_before_order_table
- woocommerce_email_after_order_table
- woocommerce_email_order_meta
- woocommerce_email_customer_details

我需要相同类型的地址检查并为自己编写了一个非常好的工作解决方案,它尊重自定义 billing/shipping 字段:

/**
 * Verify if the shipping address is different
 *
 * @param WC_Order $order
 *
 * @return bool
 */
function is_different_shipping_address( WC_Order $order ): bool {
    $billing_address  = $order->get_address();
    $shipping_address = $order->get_address( 'shipping' );

    if ( ! empty( $billing_address ) && ! empty( $shipping_address ) ) {
        foreach ( $billing_address as $billing_address_key => $billing_address_value ) {
            if ( isset( $shipping_address[ $billing_address_key ] ) ) {
                $shipping_address_value = $shipping_address[ $billing_address_key ];

                if ( ! empty( $billing_address_value ) && ! empty( $shipping_address_value ) && strcmp( $billing_address_value, $shipping_address_value ) !== 0 ) {
                    return true;
                }
            }
        }
    }

    return false;
}

首先,我从订单对象请求两个地址。之后,我默认循环查看账单地址。现在我从送货地址(如果已设置)获得相同的值并比较这两个值。如果它们不同,我返回 true,否则返回 false。

希望它也能帮助到别人。