簡體   English   中英

WP_Query按特定值先排序

[英]WP_Query Ordering by Specific Value First

我需要在我的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(UK),粉紅色TShirt(CA)。

不知道這是否行得通,但是嘗試如下操作:

$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' );

如果這不起作用,請嘗試使用值和比較運算符,因為我認為這將非常接近。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM