在我的商店中,客户可以从多个位置购买相同的产品。每个地点都有自己的shop_manager,因此我希望每个shop_manager只能看到所选变体与其位置匹配的订单(例如,来自明尼苏达州的“ shop_manager_min”只能看到已选择变体“ min”的订单;“ shop_manager_tex”,来自德克萨斯州的订单,只能看到带有“ tex”变化的订单,依此类推。
为此,我尝试了下一个代码:
add_filter( 'pre_get_posts', 'orders_by_location' );
function orders_by_location( $query ) {
//check if user role is shop_manager to continue
if(isset(wp_get_current_user()->roles[0]) && wp_get_current_user()->roles[0] == 'shop_manager'){
//gets the 3 character string code for the shop manager location
$location = substr(wp_get_current_user()->user_login, -3);
//query for all the orders where the variation matches the shop manager location
$query->set( 'meta_query', array(
array(
'key' => 'attribute_pa_location',
'value' => $location,
'compare' => '='
) ) );
return $query; }}
但是,此查询没有任何帮助,没有显示任何订单。我在做什么错了?
我尝试了下一个查询以按位置订购订单,它运行得非常完美:
add_filter( 'pre_get_posts', 'orders_by_location' );
function orders_by_location( $query ) {
if(isset(wp_get_current_user()->roles[0]) && wp_get_current_user()->roles[0] == 'shop_manager'){
$query->set('orderby', 'attribute_pa_location' );
$query->set('order', 'DESC' );
return $query; }}
与前面的一样,我看到attribute_pa_location存在并且可以通过查询访问。我还回显了attribute_pa_location值和$ location中的值,两者完全相同!!!但是,查询没有提供任何回报,并且shop_manager管理员订单页面中没有显示任何订单。
我使用_customer_user
而不是attribute_pa_sede
进行了相同的第一次查询,并且运行良好。如果查询过程很好并且meta键也很好,那么当我一起使用它们时为什么不起作用??
答案 0 :(得分:0)
我最终发现问题在于属性位置不是订单属性的一部分(而是产品属性的一部分)。作为解决方法,我在结帐时使用functions.php中的下一个动作将位置复制到了交易ID中:
add_action( 'woocommerce_checkout_create_order', 'update_order_id', 30, 2 );
function update_order_id( $order, $posted_data ) {
foreach ( $order->get_items() as $item ) {$location = $item->get_meta("pa_location");}
$order->set_transaction_id($location); }
之后,我只是查询:
add_action( 'pre_get_posts', 'orders_by_location', 100 );
function orders_by_location( $query ) {
if(isset(wp_get_current_user()->roles[0]) && wp_get_current_user()->roles[0] == 'shop_manager'){
$location = substr(wp_get_current_user()->user_login, -3);
$query->set('post_type', 'shop_order' );
$query->set('post_status', array('wc-on-hold', 'wc-processing') );
$query->set('meta_key', '_transaction_id' );
$query->set('meta_value', $location ); }
return $query; }