php - WooCommerce:按角色过滤订单
问题描述
如何按角色过滤订单?我需要按自己的作者(商店经理)过滤它们。
我有这个 url 挂钩,它根据添加订单的商店经理显示订单(在此示例中,用户 ID 为 4):
https://mywebsite.com/wp-admin/edit.php?post_type=shop_order&author=4
而且我有这段代码,它并不能完全满足我的需要(参考:https ://jeroensormani.com/order-woocommerce-orders-per-user-role/ ):
add_action( 'restrict_manage_posts', 'shop_order_user_role_filter' );
function shop_order_user_role_filter() {
global $typenow, $wp_query;
if ( in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ) ) ) :
$user_role = '';
// Get all user roles
$user_roles = array();
foreach ( get_editable_roles() as $key => $values ) :
$user_roles[ $key ] = $values['name'];
endforeach;
// Set a selected user role
if ( ! empty( $_GET['_user_role'] ) ) {
$user_role = sanitize_text_field( $_GET['_user_role'] );
}
// Display drop down
?><select name='_user_role'>
<option value=''><?php _e( 'Select a user role', 'woocommerce' ); ?></option><?php
foreach ( $user_roles as $key => $value ) :
?><option <?php selected( $user_role, $key ); ?> value='<?php echo $key; ?>'><?php echo $value; ?></option><?php
endforeach;
?></select><?php
endif;
}
add_filter( 'pre_get_posts', 'shop_order_user_role_posts_where' );
function shop_order_user_role_posts_where( $query ) {
if ( ! $query->is_main_query() || ! isset( $_GET['_user_role'] ) ) {
return;
}
$ids = get_users( array( 'role' => sanitize_text_field( $_GET['_user_role'] ), 'fields' => 'ID' ) );
$ids = array_map( 'absint', $ids );
$query->set( 'meta_query', array(
array(
'key' => '_customer_user',
'compare' => 'IN',
'value' => $ids,
)
) );
if ( empty( $ids ) ) {
$query->set( 'posts_per_page', 0 );
}
}
解决方案
推荐阅读
- ansible - 如何在 ansible 中使用嵌套变量来动态设置 playbook 运行的主机组?
- scala - 模式匹配中方法和类类型参数类型推断的区别
- javascript - 针对另一个数组过滤的渲染对象值
- c++ - MySQL C++ 连接器在 ResultSet->getBlob() 处崩溃
- sql - 物化视图锁
- c - 将数据发送回客户端 C 的 UDP 服务器
- powershell - powershell watcher 在不退出的情况下一直运行
- clean-architecture - 在 Clean Architecture 中查看层数据模型
- html - Flex 项目在 IE 中未正确填充
- amazon-cloudformation - 无法使用 CloudFormation 创建 RDS DBParameterGroup