【问题标题】:Is there a Woocommerce Subscription function that triggers actions based on subscription status?是否有基于订阅状态触发操作的 Woocommerce 订阅功能?
【发布时间】:2021-07-01 01:11:25
【问题描述】:

我使用名为 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 );

【问题讨论】:

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


    【解决方案1】:

    检查以下代码。您可以使用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 );
    

    【讨论】:

    • 感谢您的回答。我正在尝试通过代码找出确切的位置放置特定状态。比如“已取消”之类的实际订阅状态在哪里?那将在代码中的哪里?同样在代码的第一部分,我注意到有一个 $this_get_id 和 $instance,我不太确定它们是什么?他们需要改变什么吗?如果这看起来很明显,我深表歉意,因为我对这些事情没有太多经验。
    • 检查我的编辑。 $this_get_id$order_id$instance$WC_Order 对象。
    • 谢谢!现在它对我来说更有意义了。但还有几件事。 1) 在第一部分写着 $order_ID 和 $WC_order 的地方,我需要用订单的 ID 号替换它们吗?还是需要将它们包含在if($order_ID="something) 等代码的一部分中?然后在第二部分中,我需要在某处包含 $old_status 吗?
    • 你到底想用这段代码做什么。你能详细解释一下吗?
    • 我有一个会员网站,人们可以使用 Woocommerce 订阅获得/失去访问权限。成功订阅后,它们会自动放入时事通讯电子邮件列表(列表 A)中。我想要的只是当他们从他们的帐户取消或暂停订阅时,他们会被移动到一个新列表(列表 B)。然后,如果他们决定重新加入或续订订阅,他们将被移回列表 A。差不多就是这样。
    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2021-02-01
    • 2020-03-08
    • 2019-01-03
    • 2022-10-05
    • 2016-12-29
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多