最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

customization - Send default WooCommerce email when switching from custom order status

matteradmin7PV0评论

I have implemented custom order status on-review and now I need to send WooCommerce default on-hold email when switching order statuses from on-review to on-hold.

In order to do this, I have to add new woocommerce_order_status_on-review_to_on-hold_notification action that will run trigger method of WC_Email_Customer_On_Hold_Order class.

It looks like there are no hooks nor filters to add this action to default WC_Email_Customer_On_Hold_Order constructor and I have to override this class with custom one. To do so, I need to define my custom WC_Email_Customer_On_Hold_Order class after WC_Email class is defined, and before WC_Email_Customer_On_Hold_Order class is defined.

The problem is that both these classes are included during init method execution of WC_Emails and there are no hooks between file inclusions.

Is there any other way to solve my problem?

I have implemented custom order status on-review and now I need to send WooCommerce default on-hold email when switching order statuses from on-review to on-hold.

In order to do this, I have to add new woocommerce_order_status_on-review_to_on-hold_notification action that will run trigger method of WC_Email_Customer_On_Hold_Order class.

It looks like there are no hooks nor filters to add this action to default WC_Email_Customer_On_Hold_Order constructor and I have to override this class with custom one. To do so, I need to define my custom WC_Email_Customer_On_Hold_Order class after WC_Email class is defined, and before WC_Email_Customer_On_Hold_Order class is defined.

The problem is that both these classes are included during init method execution of WC_Emails and there are no hooks between file inclusions.

Is there any other way to solve my problem?

Share Improve this question asked Jan 6, 2018 at 21:59 fakemetafakemeta 1116 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

Looks like I was overcomplicating things. This is the solution:

add_filter( 'woocommerce_email_classes', 'custom_woocommerce_email_classes', 10, 1 );
function custom_woocommerce_email_classes( $email_classes ) {
    $email_classes[ 'WC_Email_Customer_On_Review_Request' ] = include_once 'includes/classes/class-wc-email-customer-on-review-request.php';

    // Register custom trigger to send on-hold email when status is switched from on-review to on-hold.
    add_action( 'woocommerce_order_status_on-review_to_on-hold_notification', [
        $email_classes[ 'WC_Email_Customer_On_Hold_Order' ], 'trigger'
    ], 10, 2 );

    return $email_classes;
}
Post a comment

comment list (0)

  1. No comments so far