WP_Query按特定值先排序

时间:2018-07-18 08:03:32

标签: php sql wordpress

我需要在我的WooCommerce商店中添加一个pre_get_posts操作。场景是:

  1. 系统将检测访问者的位置。
  2. 产品需要按其位置进行排序。

例如:当我搜索“衬衫”并且我来自澳大利亚时,首先出现的商品应该是“衬衫”,并且位置=“ AU”。

这是我当前的代码:

add_action('pre_get_posts', 'my_geo_sort_category_page');
function my_geo_sort_category_page($query) {
    if ( is_product_category() ) {
        if(is_user_logged_in()){
            $current_user = get_current_user_id();
            $visitor_country = get_user_meta($current_user, 'billing_country', true);
        } else {
            $ip = WC_Geolocation::get_ip_address();
            $geolocate = WC_Geolocation::geolocate_ip($ip);
            $visitor_country = $geolocate['country'];   
        }

        $query->set('meta_key', '_ships_from');
        $query->set('orderby', 'meta_value');
        $query->set('order','ASC');

    }
}

我不确定在哪里放置“ AU”,以便它先出现,然后再出现其他产品。

例如: 红色TShirt( AU ),蓝色TShirt( AU ),黑色TShirt(英国),粉红色TShirt(CA)。

1 个答案:

答案 0 :(得分:0)

不确定是否可以使用,但请尝试以下操作:

$meta_query = array(
'relation' => 'OR',
array(
    'key' => '_ships_from',
    'compare' => '=',
    'value' => $visitor_country,
),
array(
    'key' => '_ships_from',
    'compare' => '!=',
    'value' => $visitor_country,
)
);

$query->set( 'meta_query', $meta_query );
$query->set( 'orderby', 'meta_value' );
$query->set( 'order', 'DESC' );

如果这不起作用,请尝试使用值和比较运算符,因为我认为这将非常接近。