检查是否"运送到不同的地址"已经在Woocommerce中检查过

时间:2017-10-06 02:54:25

标签: php wordpress woocommerce orders email-notifications

在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;

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

最好的方法是比较结算和送货地址的顺序来模拟它。在大多数可用的相关电子邮件通知挂钩中,$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+中测试并正常工作

  

您还可以在此代码中使用(具有不同的优先级)以下任何钩子:
   - woocommerce_email_before_order_table
   - woocommerce_email_after_order_table
   - woocommerce_email_order_meta
   - woocommerce_email_customer_details

答案 2 :(得分:0)

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

/**
 * 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。

希望它也能帮助某人。