2013-03-30 3 views
0

맞춤형 게시 유형으로 학교 시간표가 있습니다.두 개의 메타 키를 연결 하시겠습니까?

_start_hour 
_start_minute 

나는에 따라 순서대로 출력에 게시물을 시도하고 각 포스트는 클래스가 24 시간 형식으로 시작 시간과 분을 지정하기위한 두 개의 텍스트 필드를 포함하는 게시물 메타 상자 학교 수업입니다 시간 예

// the args 
$args = array(
    'post_type' => 'my-cpt', 
    'meta_key' => '???????', 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'posts_per_page' => -1, 
); 

// The Query 
$the_query = new WP_Query($args); 

    while ($the_query->have_posts()) : $the_query->the_post(); 

      // ordered output according to time 

      endwhile; 

'meta_key'에는 두 개의 메타 키를 연결할 수있는 방법이 있습니까?

나는 'meta_key' => '_start_hour' && '_start_minute'을 시도했지만이 경우 쿼리가 중단됩니다.

답변

2

불행히도, 아니,이 기능을 지원하지 않습니다, 당신은 데이터베이스에서 루프를하기 전에 그것을 가져온 후 혼자서 그것을 정렬해야합니다.

면책 조항 노트 이 디자인에 의해 매우 추한,하지만 당신은 SQL을 직접 쿼리 작성에 당신이 무엇을 얻을, 당신은 당신이 폴백 경우 덜 추한 할 수 있습니다 함께 플레이 할 수 있도록이 워드 프레스 인은, 성능에 따라 달라집니다

제 생각에는 Wordpress는 성능이 저하 될 수 있기 때문에 제대로 처리되지 않으면 짐 대신 SQL 쿼리를 사용하는 것이 좋습니다. 그냥 당신에게 시간에 대한 포인터를 제공해야합니다 있도록이 완전히 검증되지 않은 것을

// Fetch all posts - (1 SQL Query) 
$query = new WP_Query(array(
    'post_type' => 'my-cpt', 
    'order' => 'ASC', 
    'posts_per_page' => -1, 
)); 

foreach ($query->posts as &$post) { // N queries as the number of posts you have - totally inefficient 
$post->meta = get_post_meta($post->ID); 
} 

usort($query->posts, function($a, $b) { 
    $a_time = strtotime($a->meta['_start_hour'][0] . ':' . $a->meta['_start_minute'][0]); 
    $b_time = strtotime($b->meta['_start_hour'][0] . ':' . $b->meta['_start_minute'][0]); 
    if ($a_time > $b_time) 
     return 1; 
    else if ($a_time < $b_time) 
     return -1; 
    else 
     return 0; 
}); // Sorting by date 

... the_loop ... 

노트 당신은 그것을 다시 나는 당신이 사전에 메타 키에 가입하도록 아마도 이미 할 수있는 방법을 리팩토링한다, 말을해야 PHP 대신 SQL을 사용하여 정렬하십시오 ...

+0

어떻게해야합니까? – user1444027

+0

확실히, 나는 나의 대답을 편집 할 것이다. – gmaliar

+0

환상적입니다. 고맙습니다. 이것은 훌륭한 출발점입니다. – user1444027

관련 문제