检查Woocommerce电子邮件通知中是否有两个产品的顺序相同

时间:2017-11-14 07:58:40

标签: php wordpress woocommerce orders email-notifications

如果订单包含两个特定产品ID,我正尝试向已完成订单的电子邮件添加其他文本。到目前为止,这是我的代码:

function advmi_check_order_product_id($order_id)
{
    $order = new WC_Order($order_id);
    $items = $order->get_items();
    foreach($items as $item) {
        $product_id = $item['product_id'];
        if (($product_id == 56943 && $product_id == 95956 && 'completed' == $order->status )) {
            echo '<p>Added Text for both products in the order</p><p>Text </p>';
        }
        elseif ($product_id == 56943 && 'completed' == $order->status) {
            echo '<p>Text for only 56943 </p><p>Text </p>';
}
        }

我还需要完成订单状态。

我被困了 - 请帮忙吗?

我使用的是WC版本:2.6.14

2 个答案:

答案 0 :(得分:1)

这将在已完成的订单电子邮件的订单表之前添加一些文本。我循环查看订单商品并根据订单中是否包含这些商品来设置标记。

add_action( 'woocommerce_email_before_order_table', 'add_additonal_order_email_text', 10, 4 );
function add_additonal_order_email_text( $order, $sent_to_admin, $plain_text, $email ) {
    $product_id_1 = 56943;
    $product_id_2 = 95956;
    $product_1_exists = false;
    $product_2_exists = false;

    if ( ! $sent_to_admin && 'completed' == $order->get_status() ) {
        foreach( $order->get_items() as $order_item ) {
            $product_id = $order_item->get_product_id();

            if( $product_id == $product_id_1 )
                $product_1_exists = true;
            elseif( $product_id == $product_id_2 )
                $product_2_exists = true;
        }

        if ( $product_1_exists && $product_2_exists ) {
            echo '<p>Added Text for both products in the order</p><p>Text </p>';
        } 
        elseif ( $product_1_exists && ! product_2_exists ) {
            echo '<p>Text for only 56943 </p><p>Text </p>';
        }
    }
}

答案 1 :(得分:1)

更新2 - 从版本2.4到3.2 +

添加了兼容性WC

以下是使您的代码正常工作的正确方法(在woocommerce 2.6.x及更高版本中),保留您的功能,您将在第二个自定义钩子函数中使用它来获取电子邮件通知中的显示:

// Your conditional function that output a custom text
// The argument needed is the WC_Order object (instead of the Order ID)
function advmi_check_order_product_id( $order )
{
    $has_product1 = $has_product2 = false; // Initializing
    // Added Compatibility WC from version 2.4 to 3.2+ (Get The order ID)
    ## $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
    ## $order = new WC_Order($order_id); // Get the WC_Order object

    foreach( $order->get_items() as $item ) {
        // Added Compatibility WC from version 2.4 to 3.2+
        $product_id = method_exists( $item, 'get_product_id' ) ? $item->get_product_id() : $item['product_id'];
        if( 56943 == $product_id ) $has_product1 = true;
        if( 95956 == $product_id ) $has_product2 = true;
    }

    if ( $has_product1 && $has_product2 ) {
        echo '<p>'.__('Added Text for both products in the order').'</p>
            <p>'.__('Text').'</p>';
    }
    elseif ( $has_product1 && ! $has_product2 ) {
        echo '<p>'.__('Text for only 56943').'</p>
            <p>'.__('Text').'</p>';
    }
}

// The email function hooked that display the text
add_action( 'woocommerce_email_order_details', 'add_text_conditionally', 10, 4 );
function add_text_conditionally( $order, $sent_to_admin, $plain_text, $email ) {
    // For customer completed orders status only
    if ( $sent_to_admin || ! $order->has_status('completed') ) return;
    advmi_check_order_product_id( $order );
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

经过测试并适用于版本2.6.14和3.2.3 ...