admin管理员组

文章数量:1023187

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;
}

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;
}

本文标签: customizationSend default WooCommerce email when switching from custom order status