2014-10-11 4 views
0

여기에 처음 게시; 지난 며칠간 이것에 썼지 만 나는 가까이 있지만 붙어있다. 모든 사용자 정의 작업에서 제대로 작동하는 지원되지 않는 테마를 사용합니다. 그것은 비즈니스 디렉토리 웹 사이트입니다. 테마에는 서식을 변경하고 출력 된 목록을 강조 표시하는 "추천"배치가 포함됩니다. 주제는 또한 목록에 대한 사용자 정의 게시물 유형을 사용합니다. 사용자가 도시, 주에 들어가면 테마가 검색 반경 내에서 가능한 한 많은 목록을 반환하며, 해당 반경 내에서 발견 된 추천 목록을 '가장 가까운 위치가 아니더라도 검색 결과의 상단으로 이동하려고합니다. ". 다른 파일 (views.php) 가장 높은 정격하여 정렬 순서를 변경하는 매개 변수가 내 그런

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; 
} 

}

: 주제는 다음과 같은 코드를 사용하여 geo.php 파일 내에서 "거리"로 설정 , 알파벳순, 최신 등. 우리가 붙어있는 곳은 특집 목록을 거리 결과 위에 표시하려고합니다.

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; 
    } 

내가 제거한 몇 가지 다른 "의 경우"수행하는 코드를 더 쉽게 만드는 다음 코드를 사용하여 상단에있는 기능을 갖춘 돌려주는 않는 wp_query이있다.

  case 'distance': 
      break; 

이 분명히 ORDERBY가 geo.php 파일에 정의되어 있기 때문이다 : 스위치 ORDERBY에서 기본적으로 거리는 다음과 같습니다. 나는 $ 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에서는 주문 제작자가 세밀하게 제어 할 수 있습니다.