2014-10-11 62 views
0

第一次在這裏發佈;在過去的幾天花了這麼多時間,我很接近,但是卡住了。使用與我們所有自定義項目非常匹配的支持不佳的主題。這是一個商業目錄網站。主題包括「精選」展示位置以更改格式並突出顯示輸出列表。該主題還利用自定義帖子類型的列表。用戶輸入一個城市,州和主題返回儘可能多的列表,因爲它可以在搜索半徑範圍內,我們試圖讓在該半徑內找到的任何特色列表達到結果的頂部,即使它不是「最接近」。

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添加一個數組,但它沒有使用。

我認爲答案是盯着我的臉,但我希望得到一些幫助。任何援助表示讚賞。

回答

0

想通了。我註釋掉了geo.php文件中的Orderby子句

if ('distance' == $wp_query->get('orderby')) { 
    $clauses['orderby'] = 'distance ' . ('DESC' == strtoupper($wp_query->get('order')) ? 'DESC' : 'ASC'); 
} 

然後將orderby規則移到views.php中。在Wordpress 4.0中,有一些粒度控制器可用於訂購。