第一次在這裏發佈;在過去的幾天花了這麼多時間,我很接近,但是卡住了。使用與我們所有自定義項目非常匹配的支持不佳的主題。這是一個商業目錄網站。主題包括「精選」展示位置以更改格式並突出顯示輸出列表。該主題還利用自定義帖子類型的列表。用戶輸入一個城市,州和主題返回儘可能多的列表,因爲它可以在搜索半徑範圍內,我們試圖讓在該半徑內找到的任何特色列表達到結果的頂部,即使它不是「最接近」。
static function posts_clauses($clauses, $wp_query) {
extract(appthemes_geo_get_args());
global $wpdb;
$geo_query = $wp_query->get('app_geo_query');
if (!$geo_query)
return $clauses;
extract($geo_query, EXTR_SKIP);
$R = 'mi' == $unit ? 3959 : 6371;
$clauses['join'] .= $wpdb->prepare(" INNER JOIN (
SELECT post_id, (%d * acos(cos(radians(%f)) * cos(radians(lat)) * cos(radians(lng) - radians(%f)) + sin(radians(%f)) * sin(radians(lat)))) AS distance FROM $wpdb->app_geodata
) as distances ON ($wpdb->posts.ID = distances.post_id)
", $R, $lat, $lng, $lat);
$clauses['where'] .= $wpdb->prepare(" AND distance < %f", (float) $rad);
if ('distance' == $wp_query->get('orderby')) {
$clauses['orderby'] = 'distance ' . ('DESC' == strtoupper($wp_query->get('order')) ? 'DESC' : 'ASC');
}
return $clauses;
}
}
然後另一個文件(views.php)有參數以改變由最高額定排序順序中:主題使用以下代碼設置geo.php文件中的「距離」 ,按字母順序排列,最新等等。我們被困的地方是試圖讓特色商品出現在距離結果的頂端。目前,它在頂部使用下面的代碼返回featured一個wp_query:
function parse_query($wp_query) {
global $va_options, $wpdb;
$wp_query->set('ls', trim(get_query_var('ls')));
$wp_query->set('s', get_query_var('ls'));
$wp_query->set('post_type', VA_LISTING_PTYPE);
$wp_query->set('posts_per_page', $va_options->listings_per_page);
if ('' == $wp_query->get('order'))
$wp_query->set('order', 'asc');
$orderby = $wp_query->get('orderby');
if (empty($orderby)) {
$location = trim($wp_query->get('location'));
if (!empty($location)) {
$orderby = $va_options->default_geo_search_sort;
} else {
$orderby = $va_options->default_search_sort;
}
$wp_query->set('orderby', $orderby);
}
$wp_query->set('va_orderby', $orderby);
switch ($orderby) {
case 'default':
default:
$wp_query->set('meta_key', VA_ITEM_FEATURED);
$wp_query->set('orderby', 'meta_value_num');
$wp_query->set('order', 'desc');
$wp_query->set('va-featured', true);
break;
}
我已刪除了其他一些「情況」,以使代碼更易於理解。默認情況下,在開關排序依據距離看起來是這樣的:
case 'distance':
break;
這顯然是因爲排序依據在geo.php文件中定義。我試圖添加$ wp_query-> set('meta_key','featured_cat'); (它是一個數字,或者是1或0,其中1是特色),然後爲orderby添加一個數組,但它沒有使用。
我認爲答案是盯着我的臉,但我希望得到一些幫助。任何援助表示讚賞。