WP_Query Упорядочивание по определенному значению вначале

Мне нужно добавить действие pre_get_posts в мой магазин WooCommerce. Сценарий такой:

  1. Система определит местонахождение посетителя.
  2. Товары нужно отсортировать по их местонахождению.

Например: когда я ищу «рубашка» и я из Австралии, первые продукты, которые появятся, должны быть «рубашка» и местоположение = «Австралия».

Вот мой текущий код:

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», чтобы оно появилось первым, а затем другие продукты.

Например : Красная футболка (Австралия), синяя футболка (Австралия), черная футболка (Великобритания), розовая футболка (Калифорния).

Где / как место привязано к продукту? Прикреплена ли страна, например Австралия, к товару в настраиваемом поле?

Neil K 18.07.2018 11:15

Да, он прикреплен в настраиваемом мета-поле. имя: _ships_from

Hendra Setiawan 18.07.2018 11:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
322
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не уверен, что это сработает, но попробуйте что-нибудь вроде:

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

Если это не сработает, попробуйте поиграть со значениями и операторами сравнения, так как я думаю, это будет довольно близко.

Другие вопросы по теме