第一次在这里发布;在过去的几天花了这么多时间,我很接近,但是卡住了。使用与我们所有自定义项目非常匹配的支持不佳的主题。这是一个商业目录网站。主题包括“精选”展示位置以更改格式并突出显示输出列表。该主题还利用自定义帖子类型的列表。用户输入一个城市,州和主题返回尽可能多的列表,因为它可以在搜索半径范围内,我们试图让在该半径内找到的任何特色列表达到结果的顶部,即使它不是“最接近”。
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添加一个数组,但它没有使用。
我认为答案是盯着我的脸,但我希望得到一些帮助。任何援助表示赞赏。