Мне нужно добавить действие pre_get_posts в мой магазин WooCommerce. Сценарий такой:
Например: когда я ищу «рубашка» и я из Австралии, первые продукты, которые появятся, должны быть «рубашка» и местоположение = «Австралия».
Вот мой текущий код:
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», чтобы оно появилось первым, а затем другие продукты.
Например : Красная футболка (Австралия), синяя футболка (Австралия), черная футболка (Великобритания), розовая футболка (Калифорния).
Да, он прикреплен в настраиваемом мета-поле. имя: _ships_from






Не уверен, что это сработает, но попробуйте что-нибудь вроде:
$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' );
Если это не сработает, попробуйте поиграть со значениями и операторами сравнения, так как я думаю, это будет довольно близко.
Где / как место привязано к продукту? Прикреплена ли страна, например Австралия, к товару в настраиваемом поле?