php - 根据 WooCommerce 年度订单数更改用户角色
问题描述
我正在尝试实现一项功能,在该功能下,客户在下达一定数量的订单后会收到新的用户角色,但所有这些订单必须是在同一年内下达的。
我能够根据第 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 );
解决方案
在这里使用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 文件中。测试和工作。
推荐阅读
- python - 对于 KivyMD MDBottomNavigationItem,是否甚至可以更改文本以使其不是全部大写?
- ios - 如何在到期前正确更新 Xcode 托管配置文件?
- python - 让机器人在 Python 中同时执行一组动作(使用 selenium)
- java - 如何使用多个排序匹配进行排序?
- python - 在某个值之后划分列表或数据框
- amazon-web-services - 重命名用户和跨账户策略行为
- javascript - UnhandledPromiseRejectionWarning:错误:协议错误(Page.navigate):当我传递有效 URL 时无法导航到无效 URL
- azure-table-storage - 我在哪里可以找到存储表功能的实际实现?
- wordpress - 在域的子目录下托管两个不同的应用程序
- css - 减小屏幕尺寸时我的列重叠