是否有 Woocommerce 订阅功能可以根据订阅状态触发操作?

时间:2021-04-05 05:15:30

标签: wordpress woocommerce hook-woocommerce email-client woocommerce-subscriptions

我使用名为 Mailster 的 Wordpress 电子邮件插件。我想对其进行设置,以便如果用户取消其 Woocommerce 订阅,或将其暂停或暂停,他们将被移至不同的电子邮件列表。

我有一个来自 Mailster 本身的代码,用于执行列表更改。代码如下。

add_action( 'my_custom_action', function( ) {
    
    if( $subscriber = mailster( 'subscribers' )->get_by_wpid() ){
        $list_id_from = 1;
        $list_id_to = 2;

        mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
        mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to );
     }
    
});

我需要弄清楚的是如何将其与 Woocommerce Subscriptions 集成,以便在订阅状态发生更改(取消、暂停、活动、暂停)时触发上面的代码。

我真的不知道如何处理它。我知道有几个钩子

"woocommerce_order_status_changed" and "woocommerce_subscription_status_updated"

但我不知道如何将它们合并到功能代码中。提前致谢。

更新

我可以确认,通过对代码进行一些修改,它可以工作。以下是我使用的完整代码。

function moved_to_a_different_email_list_when_subscription_status_updated( $subscription, $new_status, $old_status ){
    if( $subscriber = mailster( 'subscribers' )->get_by_wpid() ){
        $list_id_from = 5;
        $list_id_to = 6;
        if( $new_status == 'cancelled' || $new_status == 'pending-cancel' ){
            mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
            mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to );
        }
     }
}
add_action('woocommerce_subscription_status_updated', 'moved_to_a_different_email_list_when_subscription_status_updated', 10, 3 );

1 个答案:

答案 0 :(得分:0)

检查下面的代码。您可以使用 add_action 来使用 woocommerce_order_status_changedwoocommerce_subscription_status_updated 动作挂钩。

function moved_to_a_different_email_list_when_order_status_changed( $order_id, $previous_status, $next_status, $WC_Order ) { 
    if( $subscriber = mailster( 'subscribers' )->get_by_wpid() ){
        $list_id_from = 1;
        $list_id_to = 2;
        if( $next_status == 'cancelled' ){
            mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
        }else{
            mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to );
        }
     }
}; 
add_action( 'woocommerce_order_status_changed', 'moved_to_a_different_email_list_when_order_status_changed', 10, 4 ); 

function moved_to_a_different_email_list_when_subscription_status_updated( $subscription, $new_status, $old_status ){
    if( $subscriber = mailster( 'subscribers' )->get_by_wpid() ){
        $list_id_from = 1;
        $list_id_to = 2;
        if( $new_status == 'cancelled' ){
            mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
        }else{
            mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to );
        }
     }
}
add_action('woocommerce_subscription_status_updated', 'moved_to_a_different_email_list_when_subscription_status_updated', 10, 3 );