触发订阅付款的woocommerce订单电子邮件钩子

I'd like to hook into the subscription plugin when a new order has been placed which I have done successfully using this action: woocommerce_checkout_subscription_created. Inside the function for that action I want to modify the email that goes out to the customer which I have tried to do like so:

<?php 
    function subscription_created($subscription){   

    add_action('woocommerce_email_before_order_table','my_offer',20);
    $order = $subscription->order;

    function my_offer($order){

        echo "<h2>Your Trial Offer</h2>";
        echo "<p>Your subscription to this product entitles you to a free blah blah blah...</p>";

    }

    return $var;

}
add_action('woocommerce_checkout_subscription_created','subscription_created'); 
?>

Like I said, the action for the created subscription fires (I logged the output for $subscription successfully). The email action isn't working.

I'm guessing this has something to do with scope, but I'm not sure. Any thoughts would be appreciated.

Running an action within an action isn't possible, I believe.

If you check the code for this action, you have access to the following:

do_action( 'woocommerce_email_before_order_table', $order, $sent_to_admin, $plain_text, $email );

Therefore, you could perhaps NOT hook into woocommerce_checkout_subscription_created and only use woocommerce_email_before_order_table.

You could then query whether or not the $order is a subscription and then modify the output accordingly.

add_action( 'woocommerce_email_before_order_table', function($order, $sent_to_admin, $plain_text, $email) {
    if ( function_exists( 'wcs_order_contains_subscription' ) ) {
        if ( wcs_order_contains_subscription( $order->ID ) ) {
            // Do what you need to do
        }
    } 
}, 10, 4 );