Update WooCommerce Subscriptions billing email address when user updates their wordpress user email address
When a user updates their wordpress email address found on their Account Details page (found at /my-account/edit-account ), how would I automatically also update their WooCommerce Subscriptions billing email address please?
Note that I am referring to the billing account email address for WooCommerce Subscriptions (so that future subscription renewal email orders get changed etc), not just their WooCommerce order email address, in case that matters.
UPDATE: I finally figured this out...see my answer below
I finally figured this out; tested and works. See comments within:
// When user updates their wordpress profile email, change 1) WooCommerce billing account email and
// 2) active WooCommerce Subscriptions billing email to all match
add_action( 'profile_update', function( $user_id, $old_user_data ){
$old_user_email = $old_user_data->data->user_email;
$user = get_userdata( $user_id );
$new_user_email = $user->user_email;
// check if old and new email are not the same
if ( $new_user_email !== $old_user_email ) {
// update woocommerce billing email address to match user's wordpress email address
update_user_meta( $user_id, 'billing_email', $new_user_email );
// now loop through the user's woocommerce subscriptions to find the active subscription(s)
$users_subscriptions = wcs_get_users_subscriptions( $user_id );
foreach ($users_subscriptions as $subscription){
if ( $subscription->has_status(array('active')) ) {
// update the billing email for the active subscription as this is where the email address will be taken for future renewal orders
update_post_meta( $subscription->get_id(), '_billing_email', $new_user_email );
// per WooCommerce support, it is not necessary to update the billing email for the parent order of the active subscription, but here is how it would be done if desired
// $active_sub = wcs_get_subscription( $subscription->get_id() );
// update_post_meta( $active_sub->get_parent_id(), '_billing_email', $new_user_email );
}
}
}
}, 10, 2 );