php - Woocommerce धनवापसी ईमेल




wordpress (2)

मैंने खोज की एक विशाल राशि की है और यद्यपि मुझे ऐसे उपयोगकर्ता मिले हैं जिनसे मैंने पूछा है कि मेरे सबसे अच्छे ज्ञान के काम करने वाले समाधानों के निम्नलिखित उदाहरणों को कैसे हासिल करना है?

सवाल बहुत लोकप्रिय Wordpress प्लगइन "Woocommerce" के संबंध में है प्लग-इन ई-कॉमर्स साइट के मालिक और ग्राहक के लिए जीवन को आसान बनाने के लिए एक ई-मेल सिस्टम के साथ आता है। एक मुद्दा यह है कि जब कोई दुकान प्रबंधक "रिफंड किया गया" ऑर्डर की स्थिति बदलता है तो कोई भी ईमेल नहीं भेजा जाता है किसी ने यह कहा है क्योंकि यह एक मैन्युअल प्रक्रिया है यह सच है कि यह एक ऐसी प्रक्रिया है जिसे दुकान के मालिक वहां से व्यापारी खाते या पेपैल खाते के माध्यम से करेंगे। लेकिन एक बार ऐसा किया जाता है और दुकान के मालिक अपने वर्डप्रेस व्यवस्थापक पैनल में लॉग इन करते हैं और रिफंड करने के लिए ऑर्डर की स्थिति में बदलाव करते हैं तो यह ईमेल के लिए फायदेमंद होगा और ग्राहक को भेजा जाएगा।

यह कुछ मैंने देखा है अनुरोध किया है

इसलिए मैंने एक ट्यूटोरियल को http://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/#comment-553147 पर संशोधित करने का निर्णय लिया

मैं एक ईमेल भेजने की कोशिश कर रहा हूं जब "ऑर्डर आदेश स्थिति" को "रिफंड किया गया" पर अपडेट किया गया है

यहां प्रारंभिक प्लगइन फ़ाइल का कोड है

<?php
/**
 * Plugin Name: WooCommerce Custom Expedited Order Email
 * Plugin URI: http://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/
 * Description: Demo plugin for adding a custom WooCommerce email that sends admins an email when an order is received with expedited shipping
 * Author: SkyVerge
 * Author URI: http://www.skyverge.com
 * Version: 0.1
 *
 * License: GNU General Public License v3.0
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 *
 */

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

/**
 *  Add a custom email to the list of emails WooCommerce should load
 *
 * @since 0.1
 * @param array $email_classes available email classes
 * @return array filtered available email classes
 */
function add_expedited_order_woocommerce_email( $email_classes ) {

    // include our custom email class
    require( 'includes/class-wc-expedited-order-email.php' );

    // add the email class to the list of email classes that WooCommerce loads
    $email_classes['WC_Expedited_Order_Email'] = new WC_Expedited_Order_Email();

    return $email_classes;

}
add_filter( 'woocommerce_email_classes', 'add_expedited_order_woocommerce_email' );

और यहाँ मेरी कक्षा के कोड का एक लिंक है

<?php

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

/**
 * A custom Expedited Order WooCommerce Email class
 *
 * @since 0.1
 * @extends \WC_Email
 */
class WC_Expedited_Order_Email extends WC_Email {

    /**
 * Set email defaults
 *
 * @since 0.1
 */
    public function __construct() {

        // set ID, this simply needs to be a unique name
        $this->id = 'wc_expedited_order';

        // this is the title in WooCommerce Email settings
        $this->title = 'Refunded Order Email';

        // this is the description in WooCommerce email settings
        $this->description = 'Refunded Emails are sent when an order status has been changed to Refunded';

        // these are the default heading and subject lines that can be overridden using the settings
        $this->heading = 'Refunded Order';
        $this->subject = 'Refunded Order';

        // these define the locations of the templates that this email should use, we'll just use the new order template since this email is similar
        $this->template_html  = 'emails/admin-new-order.php';
        $this->template_plain = 'emails/plain/admin-new-order.php';

        // Trigger on new paid orders
        add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $this, 'trigger' ) );
        add_action( 'woocommerce_order_status_failed_to_processing_notification',  array( $this, 'trigger' ) );

        // Call parent constructor to load any other defaults not explicity defined here
        parent::__construct();

        // this sets the recipient to the settings defined below in init_form_fields()
        $this->recipient = $this->get_option( 'recipient' );

        // if none was entered, just use the WP admin email as a fallback
        if ( ! $this->recipient )
            $this->recipient = get_option( 'admin_email' );
    }

    /**
     * Determine if the email should actually be sent and setup email merge variables
     *
     * @since 0.1
     * @param int $order_id
     */
    public function trigger( $order_id ) {

        // bail if no order ID is present
        if ( ! $order_id )
            return;

        $order = new WC_Order( $order_id );

          //bail if not a refunded order
        if ( 'refunded' !== $order->status ) {
              return;
        }

        // setup order object
        $this->object = new WC_Order( $order_id );

        // bail if shipping method is not expedited
        //if ( ! in_array( $this->object->get_shipping_method(), array( 'Three Day Shipping', 'Next Day Shipping' ) ) )
            //return;

        // replace variables in the subject/headings
        $this->find[] = '{order_date}';
        $this->replace[] = date_i18n( woocommerce_date_format(), strtotime( $this->object->order_date ) );

        $this->find[] = '{order_number}';
        $this->replace[] = $this->object->get_order_number();

        if ( ! $this->is_enabled() || ! $this->get_recipient() )
            return;

        // woohoo, send the email!
        $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
    }

    /**
     * get_content_html function.
     *
     * @since 0.1
     * @return string
     */
    public function get_content_html() {
        ob_start();
        woocommerce_get_template( $this->template_html, array(
            'order'         => $this->object,
            'email_heading' => $this->get_heading()
        ) );
        return ob_get_clean();
    }


    /**
     * get_content_plain function.
     *
     * @since 0.1
     * @return string
     */
    public function get_content_plain() {
        ob_start();
        woocommerce_get_template( $this->template_plain, array(
            'order'         => $this->object,
            'email_heading' => $this->get_heading()
        ) );
        return ob_get_clean();
    }

    /**
     * Initialize Settings Form Fields
     *
     * @since 0.1
     */
    public function init_form_fields() {

        $this->form_fields = array(
            'enabled'    => array(
                'title'   => 'Enable/Disable',
                'type'    => 'checkbox',
                'label'   => 'Enable this email notification',
                'default' => 'yes'
            ),
            'recipient'  => array(
                'title'       => 'Recipient(s)',
                'type'        => 'text',
                'description' => sprintf( 'Enter recipients (comma separated) for this email. Defaults to <code>%s</code>.', esc_attr( get_option( 'admin_email' ) ) ),
                'placeholder' => '',
                'default'     => ''
            ),
            'subject'    => array(
                'title'       => 'Subject',
                'type'        => 'text',
                'description' => sprintf( 'This controls the email subject line. Leave blank to use the default subject: <code>%s</code>.', $this->subject ),
                'placeholder' => '',
                'default'     => ''
            ),
            'heading'    => array(
                'title'       => 'Email Heading',
                'type'        => 'text',
                'description' => sprintf( __( 'This controls the main heading contained within the email notification. Leave blank to use the default heading: <code>%s</code>.' ), $this->heading ),
                'placeholder' => '',
                'default'     => ''
            ),
            'email_type' => array(
                'title'       => 'Email type',
                'type'        => 'select',
                'description' => 'Choose which format of email to send.',
                'default'     => 'html',
                'class'       => 'email_type',
                'options'     => array(
                    'plain'     => 'Plain text',
                    'html'      => 'HTML', 'woocommerce',
                    'multipart' => 'Multipart', 'woocommerce',
                )
            )
        );
    }


} // end \WC_Expedited_Order_Email class

ये मेरे प्लगइन में केवल 2 फ़ाइलें हैं I मैंने इसे सक्रिय कर दिया है और यह वाणिज्य ईमेल टैब को लुभाने में ईमेल की सूची में एक ईमेल के रूप में दिखाई देता है। दुर्भाग्यवश ऑर्डर की स्थिति अपडेट होने पर ईमेल नहीं भेजा जाता है।

क्या कोई यह सलाह दे सकता है कि यह काम करने में असफल क्यों है?

मुझे उस व्यक्ति की कुछ प्रतिक्रिया हुई है जिसने निम्नलिखित कहा

"आप जिन ट्रिगर को जोड़ रहे हैं वे लंबित / ऑर्डर स्थिति परिवर्तन संसाधित करने में विफल रहे हैं - http://cld.wthms.co/cZzw आप चाहते हैं कि ये उन कार्रवाइयां हों जो कि रिफंड किए गए ऑर्डर से संबंधित हैं, जैसे : add_action ('woocommerce_order_status_refunded', सरणी ($ यह, 'ट्रिगर')); (woocommerce की ईमेल वर्गों के आसपास सटीक एक रूप के लिए) "

मैं Woocommerce 2.1.12 का उपयोग कर रहा हूँ


मुझे लगता है कि समस्या यह है कि आप बुला रहे हैं

add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $this, 'trigger' ) );

कॉल करने का प्रयास करें:

add_action( 'woocommerce_order_status_refunded', array( $this, 'trigger' ) );

मुख्य समस्या यह है कि woocommerce_order_status_refunded हुक send_transactional_email कॉलबैक के साथ डिफ़ॉल्ट रूप से पंजीकृत नहीं है, ताकि आप ऑर्डर स्थिति को वापस करने के लिए स्वचालित रूप से ईमेल भेजने के लिए उपरोक्त विधि का उपयोग नहीं कर सकते।

आप इसे निम्नलिखित के साथ बदल सकते हैं:

/**
 * Register the "woocommerce_order_status_refunded" hook which is necessary to
 * allow automatic email notifications when the order is changed to refunded.
 * 
 * @see http://.com/a/26413223/2078474
 */
add_action( 'woocommerce_init', function() {
    add_action( 
        'woocommerce_order_status_refunded', 
        array( WC(), 'send_transactional_email' ),
        10, 
        10 
    );
});

यह भी सुनिश्चित करें कि आपने इसे वू सेटिंग्स -> ईमेल टैब में संबंधित अनुभाग में सक्षम किया है:

डिफ़ॉल्ट ईमेल द्वारा स्वचालित ईमेल सूचनाओं के लिए निम्न क्रियाएं पंजीकृत हैं:

woocommerce_low_stock
woocommerce_no_stock
woocommerce_product_on_backorder
woocommerce_order_status_pending_to_processing
woocommerce_order_status_pending_to_completed
woocommerce_order_status_pending_to_on-hold
woocommerce_order_status_failed_to_processing
woocommerce_order_status_failed_to_completed
woocommerce_order_status_completed
woocommerce_new_customer_note
woocommerce_created_customer

अद्यतन करें:

अच्छी खबर है, @ हेलगैथविकिंग ने केवल उसके WooCommerce पुल अनुरोध को विलय कर दिया है (नीचे दी गई टिप्पणियां देखें)।

इसका मतलब है कि हम नए woocommerce_email_actions फिल्टर का उपयोग करने में सक्षम होना चाहिए:

add_filter( 'woocommerce_email_actions', function( $email_actions ) {
    $email_actions[] = 'woocommerce_order_status_refunded';
    return $email_actions;
});

WooCommerce 2.3+ में

इसी तरह अन्य गैर-डिफ़ॉल्ट ईमेल कार्यों के लिए काम करना चाहिए, जैसे woocommerce_order_status_cancelled