更改 WooCommerce 会员状态

Changing WooCommerce membership status

我已经敲了大约一个星期的头了。任何帮助将不胜感激。

我有一个 WooCommerce 商店,我需要能够通过 Php 更新用户的会员状态(已取消、有效等)。

我知道我可以通过以下方式获取他们的当前状态:

wc_memberships_get_user_membership( $user_id, $membership_id );

并创建新会员:

wc_memberships_create_user_membership( $args );

但我还没有找到改变状态的方法。

谢谢!

我会尝试这种方式,例如获得任何具有 'pending' 状态的会员资格:

$user_id = get_current_user_id();

$args = array( 
    'status' => 'pending'
); 

$pending_memberships = wc_memberships_get_user_memberships( $user_id, $args );

然后通过条件检查,您应该能够将此待处理状态更改为另一个状态。

好吧,在搜索了一个多月,并与 Woocommerce 的支持团队来回交流(他们没有帮助 :/ )之后,我想出了这个解决方案:

在数据库中四处游荡,我注意到所有成员都只是 post,并且他们有一个 ID 和一个 post 作者。所以我想我可以写一点 SQL 来让它发挥作用。

使用 WordPres 的内置 $wpdb class 我能够直接在数据库中更新字段:

首先你必须在你的函数中包含 $wpdb:

            global $wpdb;

然后将查询放在一起,下面是常规 SQL

中的样子
        UPDATE ie_posts
        SET post_status ='wcm-active'
        WHERE post_parent = 49 AND post_author = 49870

这是使用 class:

的样子
        $wpdb->update('ie_posts',
            array('post_status' => $_status),
            array('post_parent' => $_membership_id,
                  'post_author' => $_user_id)
        );

我建议您使用数据库的开发副本进行尝试,这样您就不会破坏任何东西。

deff 不是最漂亮的方法,但它很有魅力。如果谁有更好的处理方法,请告诉我。

致所有来到这里的人。这是我的首选解决方案。 WooCommerce 会员只是数据库中的另一个 WordPress post,会员状态存储为 post 状态。 默认情况下,WooCommerce 会员资格具有以下状态:

  • 活跃
  • 已取消
  • 免费
  • 晚点
  • 已过期
  • 暂停
  • 待取消

在数据库中,上面的状态如下所示:

  • wcm-active
  • wcm-取消
  • wcm-免费
  • wcm-延迟
  • wcm-过期
  • wcm-暂停
  • wcm-待定

您现在需要做的就是例如:

$status = 'wcm-paused';
$update_args = array( 'ID' => $membership_id, 'post_status' => $status );
wp_update_post($update_args);

我希望这对其他人有帮助。

P.s.: 我总是更喜欢使用核心功能而不是直接访问数据库。与可能的数据库更改不同,wp_update_post 是 WordPress 中基本使用的功能,并且在可预见的未来不会消失。

使用 v1.17.1(源自 class-wc-memberships-user-memberships.php)测试了以下代码

$user_membership = wc_memberships_get_user_membership( $user_id, $membership_plan_id );
$user_membership->update_status( 'expired' );