更改WooCommerce会员资格

问题描述 投票:2回答:4

现在我已经摔了大约一个星期。任何帮助将不胜感激。

我有一个WooCommerce商店,我需要在该商店中通过Php更新用户的会员身份(已取消,有效等)。

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

wc_memberships_get_user_membership( $user_id, $membership_id );

并使用以下方式创建新的成员资格:

wc_memberships_create_user_membership( $args );

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

谢谢!

php wordpress woocommerce status woocommerce-memberships
4个回答
4
投票

对于其他来这里的人。这是我的首选解决方案。WooCommerce会员资格只是数据库中的另一条WordPress帖子,其会员状态存储为帖子状态。WooCommerce会员资格默认带有以下状态:

  • 活动
  • 已取消
  • 免费
  • 延迟
  • 已过期
  • 已暂停
  • 待取消

在数据库中,上面的状态如下:

  • wcm-active
  • 取消wcm
  • wcm-complimentary
  • wcm延迟
  • wcm已过期
  • wcm暂停
  • wcm-pending

例如,您现在要做的就是:

$status = 'wcm-paused';
$update_args = array( 'ID' => $membership_id, 'post_status' => $status );
wp_update_post($update_args);

希望对其他人有帮助。

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


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不是最漂亮的方法,但是它就像一种魅力。如果有人有更好的方法来照顾它,请告诉我。


0
投票

例如,我将尝试使用这种方式来获取具有'pending'状态的所有成员资格:

$user_id = get_current_user_id();

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

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

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


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' );
© www.soinside.com 2019 - 2024. All rights reserved.