2

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

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

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

wc_memberships_get_user_membership( $user_id, $membership_id );

并通过以下方式创建新会员:

wc_memberships_create_user_membership( $args );

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

谢谢!

4

4 回答 4

5

对于其他来这里的人。这是我的首选解决方案。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);

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

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

于 2018-08-17T14:40:51.977 回答
1

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

在数据库中游来游去,我注意到所有成员都只是帖子,它们有一个 ID 和一个帖子作者。所以我想我可以写一个小 SQL 来让它工作。

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

首先,您必须在函数中包含 $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 不是最漂亮的方法,但它就像一种魅力。如果有人有更好的方法来照顾它,请告诉我。

于 2017-08-17T12:40:54.343 回答
0

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

$user_id = get_current_user_id();

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

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

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

于 2017-06-27T23:12:50.833 回答
0

使用 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' );
于 2020-04-11T05:34:38.793 回答