Php 更改WooCommerce会员身份

Php 更改WooCommerce会员身份,php,wordpress,woocommerce,status,woocommerce-memberships,Php,Wordpress,Woocommerce,Status,Woocommerce Memberships,我已经头痛了大约一个星期了。任何帮助都将不胜感激 我有一个WooCommerce商店,在那里我需要能够通过Php更新用户的成员身份(已取消、活动等) 我知道我可以通过以下方式了解他们的现状: wc_memberships_get_user_membership( $user_id, $membership_id ); 并通过以下方式创建新的会员资格: wc_memberships_create_user_membership( $args ); 但是我还没有找到一种改变现状的方法 谢谢 我将

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

我有一个WooCommerce商店,在那里我需要能够通过Php更新用户的成员身份(已取消、活动等)

我知道我可以通过以下方式了解他们的现状:

wc_memberships_get_user_membership( $user_id, $membership_id );
并通过以下方式创建新的会员资格:

wc_memberships_create_user_membership( $args );
但是我还没有找到一种改变现状的方法


谢谢

我将尝试这种方式,例如,获取任何具有“挂起”状态的成员资格:

$user_id = get_current_user_id();

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

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

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

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

在数据库中四处游荡,我注意到所有的会员资格都只是帖子,它们都有一个ID和一个帖子作者。所以我想我可以编写一个小SQL来让它工作

使用WordPres的内置类,我可以直接在数据库中更新字段:

首先,您必须在函数中包含$wpdb:

            global $wpdb;
然后将查询放在一起,下面是它在常规SQL中的外观

        UPDATE ie_posts
        SET post_status ='wcm-active'
        WHERE post_parent = 49 AND post_author = 49870
下面是使用该类时的情况:

        $wpdb->update('ie_posts',
            array('post_status' => $_status),
            array('post_parent' => $_membership_id,
                  'post_author' => $_user_id)
        );
我建议您尝试使用数据库的开发副本,这样您就不会破坏任何东西。


deff不是最漂亮的方式,但它像一个魅力。如果有人有更好的方法来照顾它,请告诉我。

对于其他来这里的人。这是我首选的解决方案。 WooCommerce成员资格只是数据库中的另一篇WordPress文章,成员资格状态存储为文章状态。 WooCommerce成员身份默认具有以下状态:

  • 活跃的
  • 取消
  • 赠品
  • 耽搁
  • 过期
  • 停顿
  • 待取消
在数据库中,上述状态如下所示:

  • wcm活动
  • wcm取消
  • 免费wcm
  • wcm延迟
  • wcm已过期
  • wcm暂停
  • wcm待定
例如,您现在需要做的就是:

$status = 'wcm-paused';
$update_args = array( 'ID' => $membership_id, 'post_status' => $status );
wp_update_post($update_args);
我希望这能帮助别人


附言:我总是喜欢使用核心功能,而不是直接访问数据库。与可能的数据库更改不同,wp_update_post是WordPress中基本上使用的函数,在可预见的将来不会消失。

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


是否要更改所有用户的状态?然后马上?不,我需要更改一个会员上一个用户的状态好的,酷。但是你如何着手改变它呢?这就是我被困的地方。假设一个用户有两个成员身份,我需要修改其中一个的状态。我也有同样的问题,找不到修改状态的命令…有更新吗?@Stephen有,请看我的答案。它很脏,但能用
$user_membership = wc_memberships_get_user_membership( $user_id, $membership_plan_id );
$user_membership->update_status( 'expired' );