【问题标题】:Change user role based on WooCommerce yearly orders count根据 WooCommerce 年度订单数更改用户角色
【发布时间】:2019-07-27 22:21:11
【问题描述】:

我正在尝试实现一项功能,让客户在下达一定数量的订单后获得新的用户角色,但所有这些订单必须在同一年内下达。

我能够根据第 n 个订单数分配用户角色,但似乎无法超出需要考虑日期的范围,有人可以指出正确的方向或指出我可能会做什么失踪。

这是我迄今为止尝试过的。

function change_user_role_on_order_status_completed( $order_id ) {

    $order = new WC_Order( $order_id );

    $user_id = $order->user_id;

    $order_this_year = false;

    $current_date = date('Y');

    $total_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => $user_id,
        'post_type'   => 'shop_order',
    ) );

    if ( $total_orders > 1 ) {
        foreach ($order->get_items() as $item_key => $item_values):

            // Get the item date
            if ($item_date = $item_values->get_date_completed()->format ('Y') == $current_date) {
                $order_this_year = true;
            }

        endforeach;

        if ($order_this_year) {
            $user = new WP_User( $order->user_id );

            // Set role editor
            $user->set_role( 'customer_club' ); 
        }

    }
}

add_action( 'woocommerce_order_status_completed', 'change_user_role_on_order_status_completed', 10, 1 );

【问题讨论】:

  • 嗨,刚刚检查的与我尝试做的完全不同,基本上我有两个条件需要通过才能改变用户角色,首先客户必须有更多让我们说5 个订单,而且这些订单必须是在同一年完成的,才有资格更改用户角色,希望这是有道理的

标签: php wordpress woocommerce hook-woocommerce orders


【解决方案1】:

在此处使用WC_Order_Query 是一种更轻松、更简单的方法,可以根据年订单数更改用户角色:

add_action( 'woocommerce_order_status_completed', 'change_user_role_on_order_status_completed', 10, 2 );
function change_user_role_on_order_status_completed( $order_id, $order ) {
    // Here set the minimal order count
    $min_orders_count = 3;

    // The WC_Order_Query
    $queried_orders = wc_get_orders( array(
        'limit'        => -1,
        'customer_id'  => $order->get_customer_id(),
        'date_paid'    => '>=' . date('Y') . '-01-01', // or 'date_created'
        'return'       => 'ids'
    ) );

    if ( sizeof($queried_orders) >= $min_orders_count ) {
        // Get an instance of the customer WP_User Object
        $user = $order->get_user();

        // Change the user role
        $user->set_role( 'customer_club' );
    }
}

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

【讨论】:

  • 嗨,不幸的是它不起作用,也尝试了变化和不同的主题,但仍然没有任何想法,为什么?
  • @star_gazer 刚刚重新测试了这段代码,它运行良好(这与主题无关)。每次订单完成通知时都会触发该代码,当前订单将包含在查询的订单计数中。
  • 是的,我知道它与主题无关,只是想确保在我的最终,基于它应该工作的代码,它只是不改变后端的用户角色,即使满足所有条件,这也很奇怪。
  • @star_gazer 我已经尝试使用 ADD ROLE $user->add_role( 'customer_club' ); 并且它正在添加角色。所以它应该与 SET ROLE 以相同的方式工作
  • 它似乎只是根据不同的条件运行测试,我使用 date_created,我不确定,但我认为我应该能够查询已完成状态将检查。非常感谢您的帮助。
猜你喜欢
  • 2021-01-30
  • 2020-11-14
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 2018-11-22
  • 2021-04-08
相关资源
最近更新 更多