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?

1 Answer 1


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;
  • If this solution worked for you than you should accept your own answer. Apr 11, 2019 at 16:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.