更改 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' );
我已经敲了大约一个星期的头了。任何帮助将不胜感激。
我有一个 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' );