现在我已经摔了大约一个星期。任何帮助将不胜感激。
我有一个WooCommerce商店,我需要在该商店中通过Php更新用户的会员身份(已取消,有效等)。
我知道我可以通过以下方式获取其当前状态:
wc_memberships_get_user_membership( $user_id, $membership_id );
并使用以下方式创建新的成员资格:
wc_memberships_create_user_membership( $args );
但是我还没有找到改变状态的方法。
谢谢!
对于其他来这里的人。这是我的首选解决方案。WooCommerce会员资格只是数据库中的另一条WordPress帖子,其会员状态存储为帖子状态。WooCommerce会员资格默认带有以下状态:
在数据库中,上面的状态如下:
例如,您现在要做的就是:
$status = 'wcm-paused';
$update_args = array( 'ID' => $membership_id, 'post_status' => $status );
wp_update_post($update_args);
希望对其他人有帮助。
P.s .:与直接访问数据库相比,我总是更喜欢使用核心功能。与可能的数据库更改不同,wp_update_post是WordPress中基本使用的函数,并且在可预见的将来不会消失。
好,所以经过一个多月的搜索,并与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不是最漂亮的方法,但是它就像一种魅力。如果有人有更好的方法来照顾它,请告诉我。
例如,我将尝试使用这种方式来获取具有'pending'状态的所有成员资格:
$user_id = get_current_user_id();
$args = array(
'status' => 'pending'
);
$pending_memberships = wc_memberships_get_user_memberships( $user_id, $args );
然后,通过有条件的检查,您应该能够将此待处理状态更改为另一个状态。
[使用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' );