मैं एक ई-कॉमर्स व्यवसाय के लिए WooCommerce प्लगइन का उपयोग कर रहा हूं और जब मैं कोई ऑर्डर बनाता हूं या उसकी स्थिति बदलता हूं तो ऑर्डर की वर्तमान स्थिति को सूचित करने के लिए हमेशा एक ईमेल भेजा जाता है। कुछ मौजूदा कारणों से उत्पादों की कीमत और ईमेल ऑर्डर विवरण के भीतर मूल्य, उप-योग और कुल डेटा वाले WooCommerce ईमेल टेम्प्लेट के बारे में कोई जानकारी नहीं है। मुझे मूल्य, उप-योग और कुल डेटा को हटाने के लिए और पते के शीर्षकों को बदलने के लिए उन टेम्पलेट्स को संशोधित करने की आवश्यकता है।

मैंने यह पता लगाने के लिए woocommerce प्लगइन फ़ोल्डर को ब्राउज किया कि ईमेल टेम्प्लेट कहां हैं और मैंने गुगल किया और एक विचलित समाधान पाया जो हुक को हटाने में निहित है जो ऑर्डर डेटा उत्पन्न करता है, जो WC_Emails क्लास कंस्ट्रक्टर में पाया जाता है, फिर इसे फिर से जोड़ें और इसे एक कस्टम फ़ंक्शन पर वायर करें जो वांछित संरचना उत्पन्न करता है। समाधान मेरे लिए आंशिक रूप से काम करता है जैसे कि मैंने पहली बार ऑर्डर ऑन-होल्ड स्थिति में ऑर्डर बनाया है और एक ईमेल भेजा जाता है और आवश्यकतानुसार दिखता है, हालांकि, जब मैं ऑर्डर की स्थिति को बदलता हूं, उदाहरण के लिए, प्रसंस्करण, या किसी भी बाद के आदेश में कहा गया है कि एक और ईमेल अब दो ऑर्डर विवरण तालिकाओं के साथ भेजा गया है जो मेरे कस्टम फ़ंक्शन द्वारा उत्पन्न किया गया है और इसके नीचे WooCommerce द्वारा उत्पन्न एक है जैसा कि नीचे की छवि द्वारा दिखाया गया है।

enter image description here

// add the action
add_action( 'woocommerce_email_order_details', 'remove_order_details', 10, 4);
add_action( 'woocommerce_email_order_details','action_woocommerce_email_order_details', 10, 4);

// define the woocommerce_email_order_details callback
function action_woocommerce_email_order_details($order, $sent_to_admin, $plain_text, $email)
{
    $text_align = is_rtl() ? 'right' : 'left';
    ?>
    <h2>
        <?php
        if ($sent_to_admin) {
            $before = '<a class="link" href="' . esc_url($order->get_edit_order_url()) . '">';
            $after = '</a>';
        } else {
            $before = '';
            $after = '';
        }
        /* translators: %s: Order ID. */
        echo wp_kses_post($before . sprintf(__('[Order #%s]', 'woocommerce') . $after . ' (<time datetime="%s">%s</time>)', $order->get_order_number(), $order->get_date_created()->format('c'), wc_format_datetime($order->get_date_created())));
        ?>
    </h2>

    <div style="margin-bottom: 40px;">
        <table class="td" cellspacing="0" cellpadding="6"
               style="width: 100%; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;" border="1">
            <thead>
            <tr>
                <th class="td" scope="col"
                    style="text-align:<?php echo esc_attr($text_align); ?>;"><?php esc_html_e('Product', 'woocommerce'); ?></th>
                <th class="td" scope="col"
                    style="text-align:<?php echo esc_attr($text_align); ?>;"><?php esc_html_e('Quantity', 'woocommerce'); ?></th>
            </tr>
            </thead>
            <tbody>
            <?php foreach ($order->get_items() as $item_id => $item) { ?>
                <tr class="<?php echo esc_attr(apply_filters('woocommerce_order_item_class', 'order_item', $item, $order)); ?>">
                    <td class="td"
                        style="text-align:<?php echo esc_attr($text_align); ?>; vertical-align: middle; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; word-wrap:break-word;">
                        <?php

                        // Product name.
                        echo wp_kses_post(apply_filters('woocommerce_order_item_name', $item->get_name(), $item, false));

                        // allow other plugins to add additional product information here.
                        do_action('woocommerce_order_item_meta_start', $item_id, $item, $order, $plain_text);

                        // allow other plugins to add additional product information here.
                        do_action('woocommerce_order_item_meta_end', $item_id, $item, $order, $plain_text);

                        ?>
                    </td>
                    <td class="td"
                        style="text-align:<?php echo esc_attr($text_align); ?>; vertical-align:middle; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;">
                        <?php echo wp_kses_post(apply_filters('woocommerce_email_order_item_quantity', $item->get_quantity(), $item)); ?>
                    </td>
                </tr>
            <?php } ?>
            </tbody>
            <tfoot>
            <?php
            $meta_data = $order->get_meta('_custom_px_src');
            if ($meta_data) {
                ?>
                <tr>
                    <th class="td" scope="row" colspan="2"
                        style="text-align:<?php echo esc_attr($text_align); ?>;"><?php esc_html_e(is_rtl() ? 'وصفة طبية' : 'Prescription:'); ?></th>
                    <td class="td">
                        <img src="<?php echo $meta_data['value']; ?>" alt="Prescription image" height="42" width="42">
                        <a href="<?php echo $meta_data['value']; ?>" target="_blank"></a>
                    </td>
                </tr>
                <?php
            }
            if ($order->get_customer_note()) {
                ?>
                <tr>
                    <th class="td" scope="row" colspan="2"
                        style="text-align:<?php echo esc_attr($text_align); ?>;"><?php esc_html_e('Note:', 'woocommerce'); ?></th>
                    <td class="td"
                        style="text-align:<?php echo esc_attr($text_align); ?>;"><?php echo wp_kses_post(wptexturize($order->get_customer_note())); ?></td>
                </tr>
                <?php
            }
            ?>
            </tfoot>
        </table>
    </div>
    <?php
}

function remove_order_details()
{
    $mailer = WC()->mailer(); // get the instance of the WC_Emails class
    remove_action('woocommerce_email_order_details', array($mailer, 'order_details'));
}

मुझे जो उम्मीद थी वह एक समाधान है जो केवल मेरे कस्टम फ़ंक्शन द्वारा उत्पन्न ऑर्डर विवरण तालिका से संबंधित है

1
Amr.Mohammad87 31 अगस्त 2019, 17:49

1 उत्तर

सबसे बढ़िया उत्तर

मुझे वह समस्या मिली जिसके कारण ईमेल टेम्प्लेट के भीतर ऑर्डर विवरण तालिका दोहराव का कारण बनता है और यह woocommerce_email_order_details हटाने की कार्रवाई को नीचे दिखाए गए अनुसार करने की क्रिया के बराबर प्राथमिकता के साथ जोड़ रहा था

add_action( 'woocommerce_email_order_details', 'remove_order_details', 10, 4);
add_action( 'woocommerce_email_order_details','action_woocommerce_email_order_details', 10, 4);

हालांकि, मुझे क्या करना चाहिए, इसके बजाय हटाने की कार्रवाई को उच्च प्राथमिकता के साथ प्राथमिकता दें

add_action( 'woocommerce_email_order_details', 'remove_order_details', 1, 4);
add_action( 'woocommerce_email_order_details','action_woocommerce_email_order_details', 10, 4); 
0
Amr.Mohammad87 3 सितंबर 2019, 09:57