Php 更改WooCommerce会员身份
我已经头痛了大约一个星期了。任何帮助都将不胜感激 我有一个WooCommerce商店,在那里我需要能够通过Php更新用户的成员身份(已取消、活动等) 我知道我可以通过以下方式了解他们的现状: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 ); 但是我还没有找到一种改变现状的方法 谢谢 我将
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' );