简体   繁体   English

添加自定义woocommerce邮件以订购批量操作

[英]Adding a custom woocommerce mail to order bulk actions

I've added a custom woocommerce mail to my website. 我已将自定义woocommerce邮件添加到我的网站。 And everything works fine, the only problem is, it doesn't add to the bulk actions on the order site. 而且一切正常,唯一的问题是,它没有添加到订购网站上的批量操作中。 Because we frequently resend emails for different purposes, this option would be very nice. 由于我们经常出于不同目的重新发送电子邮件,因此该选项非常有用。 Does anybody know how to add this? 有人知道如何添加吗?

Here's the code of the email class: 这是电子邮件类的代码:

<?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 = 'Test Mail';
        // this is the description in WooCommerce email settings
    $this->customer_email   = true;
    // Kunde als Empfänger

        $this->description = 'Test Mail';
        // these are the default heading and subject lines that can be overridden using the settings
        $this->heading = 'Test Mail';
        $this->subject = 'Test Mail';
        // 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/customer-test.php';
        $this->template_plain = 'emails/plain/admin-new-order.php';

        //add_action( 'woocommerce_order_status_processing_to_completed_notification', array( $this, 'trigger' ) );
        //add_action( 'woocommerce_order_status_processing_to_testtragenbezahlt_notification',  array( $this, 'trigger' ) );
        // Call parent constructor to load any other defaults not explicity defined here
        parent::__construct();
    } 
    /**
     * 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;
        // setup order object
        $this->object = new WC_Order( $order_id );
    $this->recipient    = $this->object->billing_email;

        // 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 2.0
     */
    public function init_form_fields() {
        $this->form_fields = array(
            'enabled'    => array(
                'title'   => 'Enable/Disable',
                'type'    => 'checkbox',
                'label'   => 'Enable this email notification',
                'default' => 'yes'
            ),
            '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', 'woocommerce' ),
                    'html'      => __( 'HTML', 'woocommerce' ),
                    'multipart' => __( 'Multipart', 'woocommerce' ),
                )
            )
        );
    }
} // end \WC_Expedited_Order_Email class

Thank you Lukas 谢谢卢卡斯

yes there's actually a filter built in to WooCommerce to do this. 是的,实际上WooCommerce内置了一个过滤器来执行此操作。 Here's a small snippet that might help you. 这是一个小片段,可能会对您有所帮助。

 function change_order_action_resend_emails( $emails ) { $emails[] = 'wc_expedited_order'; //Add all eMail ids you want to add return $emails; } add_filter( 'woocommerce_resend_order_emails_available', 'change_order_action_resend_emails' ); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM