2013-05-16 2 views
8

나는 wp_query으로 작업 솔루션을 얻으려고 애 쓰고 있습니다. 현재 게시물에 할당 된 맞춤 설정 중 하나는 게시물의 '추천'여부와 두 번째는 게시물의 날짜와 시간 (더 이상 결과에 표시되지 않음)입니다.메타 및 날짜가 더 큰 쿼리를 포함하는 게시물 쿼리

WP_Query('meta_key=skyali_feature&showposts=4&orderby=post_date'); 

종료 날짜가 meta_keywp_postmeta 테이블에 설정 : 나는 기능 작업 쿼리를 가지고 있지만, 단지 그것으로이 종료 날짜를 작업해야, 여기에 쿼리 작업은 '기능'으로 찾을 수있다 'the_date'이고 meta_values은 '05/16/ 2013 05:24'처럼 보입니다. 위의 쿼리를 편집하고 싶습니다. 'the_date'가 설정된 경우 게시물은 'the_date'가 오늘 날짜와 시간보다 큰 경우에만 포함됩니다.

WP_Query(
    'meta_key=skyali_feature&meta_key=the_date&meta_compare=>=&meta_value=' 
    .date('d/m/Y H:i') 
    .'&showposts=4&orderby=post_date&orderby=the_date' 
); 

답변

13

내가 최근에 매우 비슷한 일을해야했다 대신 meta_query 속성을 사용할 필요 결국 :

여기 내 실패 시도이다. 당신이 뭔가를 할 싶을 것이다 :

$today = date('Ymd'); 
$args = array(
    'post_type' => 'post', 
    'posts_per_page' => '4', 
    'meta_key' => 'the_date', 
    'meta_query' => array(
     array(
      'key' => 'skyali_feature' 
     ), 
     array(
      'key' => 'the_date', 
      'value' => $today, 
      'compare' => '>=' 
     ) 
    ), 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC' 
); 

$your_custom_query = new WP_Query($args); 

몇 가지 참고 사항 ...

  • 난 단지 내 예를 날짜별로 필터링 할 필요하지만, 당신이해야합니다 것 같습니다

    너의 데이트/타임을해라. (원하는 형식을 사용하여 $today 변수의 첫 번째 행을 조정할 수 있습니다).

  • showposts 대신 posts_per_page을 사용하십시오. showposts은 더 이상 사용되지 않습니다.

  • meta_key 두 번 (배열의 최상위 레벨에 한 번, meta_query 어레이의 요소로 한 번 포함). 돈이 없으면 키를 기준으로 결과를 정렬 할 수없는 알려진 버그가 있습니다. '는 t는이 방법을 포함한다. 난이 도움이 잠시 동안 하나 너무!

희망, 재미를 가지고 싸웠다!

가로 다시 skyali_feature 키를 추가 잊으 [편집] 배열. 날짜 데이터 형식의 고급 사용자 정의 필드 플러그인을 사용하여 사람들을위한

+0

안녕하십니까. 시도했지만 결과가 없습니다. 여기 내 버전이 있습니다 : $ today = date ('d/m/Y H : i'); $ 인수 = 배열 ​​( 'post_type'=> '포스트' 'posts_per_page'=> '4', 'meta_key'=> 'the_date'를 'meta_query'=> 어레이 ( 어레이 ( '키 '=>'the_date ', '값 '=> $ 오늘, '비교 '=>'> = ' ) ), 'ORDERBY '=>'meta_value_num ', '순서 '=>'ASC ' ); – Paul

+0

아, 문제가 생겼다고 생각합니다. 우리는 * 문자열 * 값을 비교하려고합니다 ('date ('d/m/YH : i')의 출력은 문자열과 비교할 수 없습니다.) 어떻게 그 날짜/시간을 귀하의 게시물은 자유 형식의 텍스트 필드이며 그 형식으로 귀하의 날짜와 시간을 입력 하시겠습니까? 아니면 실제로 데이터베이스에 날짜/시간 (또는 타임 스탬프) 필드로 저장하고 있습니까? –

+0

당신은 현장이었습니다. on, 내 날짜 형식은 쓰레기. 감사합니다! – Paul

4

, 이것은 당신이 크거나 오늘과 같 날짜에 필요한 것입니다 : 당신이 찾을 수 Custom metadata manager를 사용하는 사람들에게

$today = date('Ymd'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $today, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 
+0

얻을 수 없습니다. 이 질문에 대한 답은 다음과 같습니다 날짜 형식 때문입니까? http://pastie.org/9433564 ACF에서 친절한 날짜와 이러한 상황에 대한 타임 스탬프를 모두 저장하기를 바랍니다. –

+0

이것은 완벽하게 작동했습니다. 고급 사용자 정의 필드 Pro v5 사용. 감사합니다. –

1

datepicker 필드가 시간 소인으로 저장됩니다.

비슷한 경우 위의 예제는 작동하지 않으며 비교할 값을 PHP로 분류 할 수 있습니다.그리고이 작업 할 수 있습니다 23:59:59에 앞서 하루 타임 스탬프 : 당신은 또한 블로그의 시간대 설정을 고려하려면

$yesterday = strtotime('yesterday 23:59:59'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $yesterday, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 

은 다음 예에서와 같이 current_time()를 사용

$now = current_time('timestamp'); 
    $yesterday = mktime(23, 59, 59, date('n',$now), date('j',$now)-1); 
관련 문제