Woocommerce自定义订单状态不会触发自定义电子邮件

时间:2017-12-16 09:39:57

标签: woocommerce hook-woocommerce

我有一个名为Shipping Details的自定义订单状态,在订单完成触发器被触发后会被选中。

订单状态代码

function register_shipping_details_status() {
register_post_status( 'wc-shipping-details', array(
    'label' => 'Send Shipping Details',
    'public' => true,
    'exclude_from_search' => false,
    'show_in_admin_all_list' => true,
    'show_in_admin_status_list' => true
    //'label_count' => _n_noop( 'Shipping Details <span class="count">(%s)</span>', 'Shipping Details <span class="count">(%s)</span>' )
) );
}
add_action( 'init', 'register_shipping_details_status' );

// Add to list of WC Order statuses
function add_shipping_details_to_order_statuses( $order_statuses ) {
$new_order_statuses = array();
// add new order status after completed
foreach ( $order_statuses as $key => $status ) {
    $new_order_statuses[ $key ] = $status;
    if ( 'wc-completed' === $key ) {
        $new_order_statuses['wc-shipping-details'] = 'Send Shipping Details';
    }
}
return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'add_shipping_details_to_order_statuses' );

我的电子邮件触发器代码就在这里。

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

if ( ! class_exists( 'WC_Shipping_Details_Email' ) ) :

/**
 * Customer Shipping Details Email
 */
class WC_Shipping_Details_Email extends WC_Email {

/**
 * Constructor.
 */
public function __construct() {

    $this->id             = 'wc_shipping_details';
    $this->customer_email = true;
    $this->title          = __( 'Shipping Details', 'woocommerce' );
    $this->description    = __( 'Shipping details emails are sent after the order has been marked completed .', 'woocommerce' );

    $this->heading        = __( 'Shipping Details for your order', 'woocommerce' );
    $this->subject        = __( 'Shipping details for your order from INAI', 'woocommerce' );

    $this->template_html  = 'emails/customer-shipping-details.php';
    $this->template_plain = 'emails/plain/customer-shipping-details.php';

    // Triggers for this email
    add_action( 'woocommerce_order_status_shipping_details_notification', array( $this, 'trigger' ) );

    // Call parent constuctor
    parent::__construct();
}

/**
 * Trigger.
 *
 * @param int $order_id
 */
public function trigger( $order_id ) {

    if ( $order_id ) {
        $this->object                  = wc_get_order( $order_id );
        $this->recipient               = $this->object->billing_email;

        $this->find['order-date']      = '{order_date}';
        $this->find['order-number']    = '{order_number}';

        $this->replace['order-date']   = date_i18n( wc_date_format(), strtotime( $this->object->order_date ) );
        $this->replace['order-number'] = $this->object->get_order_number();
    }

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

    $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
}

注册电子邮件的操作

//custom hooks for custom woocommerce order email
function register_custom_order_status_action( $actions ){
$actions[] = 'woocommerce_order_status_shipping_details';
return $actions;
}
add_filter( 'woocommerce_email_actions', 'register_custom_order_status_action' );

由于某种原因,邮件没有被触发。我经常环顾四周,甚至找到了其他一些问题已经解决的人。 WooCommerce - send custom email on custom order status change。 我的代码几乎完全相同,但仍然不知道我错过了什么。请帮忙。

0 个答案:

没有答案