ส่งเทมเพลตอีเมลที่กำหนดเองสำหรับผลิตภัณฑ์อื่น - woocommerce

ฉันมีเว็บไซต์ Wordpress ที่ใช้ปลั๊กอิน woocommerce ฉันมีผลิตภัณฑ์หลายประเภท และฉันต้องส่งเทมเพลตอีเมลที่แตกต่างกันสำหรับผลิตภัณฑ์ที่แตกต่างกัน

ฉันพบวิธีแก้ปัญหาเดียวคือเพิ่มการตรวจสอบไฟล์เทมเพลตแต่ละไฟล์สำหรับอีเมลใน woocommerce/emails ในโฟลเดอร์ธีม มีวิธีใดที่ดีกว่าในการทำเช่นนี้หรือไม่

มีตัวเลือกอะไรบ้างใน

add_action( 'woocommerce_email', 'woocommerce_email_function' );

OR

เป็นไปได้ไหมที่จะเพิ่มส่วนหัวที่แตกต่างกันสำหรับการสั่งซื้อผลิตภัณฑ์เฉพาะ?


person Shijin TR    schedule 18.07.2017    source แหล่งที่มา
comment
ดังที่คุณทราบว่ามี 2 วิธี: 1) ใช้ hooks ทั้งหมดที่มีอยู่ ที่เกี่ยวข้องกับการแจ้งเตือนทางอีเมล (บางส่วนอยู่ในเทมเพลต) 2) แทนที่เทมเพลต woocommerce ผ่านธีม … เนื่องจากคำถามของคุณไม่มีรายละเอียดมากนัก ( เราไม่สามารถเดาได้ว่าคุณกำลังพยายามทำอะไร) และคุณไม่แสดงโค้ดที่คุณกำหนดเอง เป็นไปไม่ได้เลยที่จะตอบคำถามนี้...   -  person LoicTheAztec    schedule 18.07.2017
comment
@LoicTheAztec ฉันมีสินค้าที่แตกต่างกันในร้านของฉัน หากสั่งซื้อ จะมีการส่งอีเมลคำสั่งซื้อโดยใช้เทมเพลต ฉันจำเป็นต้องใช้เทมเพลตที่แตกต่างกันตามรหัสผลิตภัณฑ์   -  person Shijin TR    schedule 18.07.2017
comment
ใช่ ฉันเข้าใจมาก่อนแล้ว ขอบคุณ… รหัสไหนและที่ไหน… คุณสามารถให้รหัสที่คุณใช้ในเทมเพลตที่ถูกแทนที่นี้ได้หรือไม่ ... ขอบคุณ   -  person LoicTheAztec    schedule 18.07.2017
comment
@LoicTheAztec ที่ยังไม่ได้เขียน วิธีที่ฉันวางแผนจะเขียนโค้ดคือตรวจสอบด้วยรหัสคำสั่งซื้อในไฟล์เทมเพลต และหากเป็นคำสั่งซื้อที่มีหมายเลขผลิตภัณฑ์ ให้ส่งคืน html สำหรับเทมเพลต   -  person Shijin TR    schedule 18.07.2017
comment
ตกลง แต่คำตอบขึ้นอยู่กับตำแหน่งที่คุณต้องการแสดงโค้ด html ของคุณ (และสำหรับสถานะการสั่งซื้อใด) ดังนั้นโปรดคุณสามารถเพิ่มโค้ดที่คุณต้องการเพิ่มและตำแหน่งที่แน่นอน (เมื่อเงื่อนไขตรงกัน)… ด้วยวิธีนี้ ฉันจะ สามารถช่วย...   -  person LoicTheAztec    schedule 18.07.2017
comment
คุณได้ลองวิธีแก้ปัญหาของฉันด้านล่างแล้วหรือยัง?   -  person jjj    schedule 02.08.2017


คำตอบ (2)


ฉันมีวิธีแก้ปัญหา เช่น รหัสผลิตภัณฑ์ 999 ที่คุณต้องการแสดงชื่อส่วนหัว This is a very special title:

function change_email_title_header_depending_of_product_id( $email_heading, $order ) {
    global $woocommerce;
    $items = $order->get_items();

    // check products
    foreach ( $items as $item ) {
        $product_id = $item['product_id'];
        if ( $product_id == 999 ) {
            $email_heading = 'This is a very special title';
        }
        return $email_heading;
    }
}
add_filter( 'woocommerce_email_heading_customer_processing_order', 'change_email_title_header_depending_of_product_id', 10, 2 );
person jjj    schedule 19.07.2017

ฉันมีเวลามากในการหาวิธีรับ ID คำสั่งซื้อจาก 'woocommerce_email' และไม่พบคำตอบใน StackOverflow ดังนั้นฉันจึงคิดว่าอาจแบ่งปันสิ่งที่ใช้ได้ผลสำหรับฉัน

การแทนที่เทมเพลตเป็นวิธีที่ชัดเจนที่สุดในการเปลี่ยนเนื้อหาอีเมล แต่กลับทำให้เทมเพลตอีเมลจากปลั๊กอินอื่นๆ เช่น Smart Coupons เสียหาย

ฉันสามารถลบเทมเพลต email_order_details.php โดยทางโปรแกรมออกจากอีเมลที่มีผลิตภัณฑ์เฉพาะเช่นนี้:

add_action( 'woocommerce_email', 'remove_woocommerce_email_order_details' );

// Using $object in function was key to remove_action below
function remove_woocommerce_email_order_details( $object ) {

    // Simple way to get the order ID
    $order_id = get_the_ID();

    $order = new WC_Order( $order_id );
    $items = $order->get_items();

    foreach ( $items as $item ) {

        // If product ID in order, remove order details
        $product_id = $item['product_id'];
        if ( $product_id == 1234 ) {
            remove_action( 'woocommerce_email_order_details', array( $object, 'order_details' ), 10, 4 );
        } 
    }

}

ตอนนี้ฉันได้เพิ่มตาราง woocommerce_email_order_details กลับมาพร้อมกับข้อมูลของฉันเอง

add_filter( 'woocommerce_email_order_details', 'add_custom_email_order_details' );

function add_custom_email_order_details() {

    // With these, you should be able access most elements in the 'woocommerce_email_order_details' table
    $order_id = get_the_ID();
    $order = new WC_Order( $order_id );
    $order_type = $order->order_type;
    $customer_id = $order->get_user_id();

    $items = $order->get_items();
    foreach ( $items as $item ) {
        $product_id = $item['product_id'];
    }

    if( $product_id == 1234 ) {
        echo "Order Type: " . $order_type;
        echo "Customer ID: " . $customer_id;
        echo "Product ID:" . $product_id;
    }

}

หวังว่าจะช่วยคนอื่นได้!

person aleks1217    schedule 20.01.2019
comment
ปรากฎว่าโซลูชันนี้ใช้ได้กับอีเมลที่เรียกใช้ด้วยตนเองจากหน้าแก้ไขคำสั่งซื้อเท่านั้น ดังนั้น มันจะทำงานได้อย่างถูกต้องกับคำสั่งซื้อใหม่ ฉันย้าย remove_action( 'woocommerce_email_order_details', array( $object, 'order_details' ), 10, 4 ); จากฟังก์ชัน remove_woocommerce_email_order_details ไปยังฟังก์ชัน add_custom_email_order_details หลังจาก if( $product_id == 1234 ) - person aleks1217; 30.01.2019