2014-06-18 2 views
2

Wordpress에서 "이벤트"라는 사용자 정의 게시 유형을 만들고 고급 사용자 정의 필드를 사용하여 사용자 정의 필드에 추가했습니다. 달력에 대한 필요성 자체가 기본이므로 필자는 기본 필드 만 가지고 있습니다.미래 이벤트 만 표시 할 쿼리 배열 - PHP

필드는 다음과 같습니다 날짜, 종료 날짜, 시작 시간을 시작, 종료 시간, 위치, 타이틀은 종료 날짜가 오늘 날짜보다 큰 경우 "기본적으로 배열과 게시물을 조회하려고

, 그리고 쇼 게시물 ".

문제는 고급 사용자 정의 필드에는 PHP처럼 YYYYMMDD로 날짜의 서식을 지정하는 DatePicker가 내장되어 있습니다. 나는 A) 게시 된 모든 "이벤트"반환되는 중 최종 결과 적어도 20 개의 변화와 기술을 시도했습니다

if (isset($_GET['_m'])) { 

    $current_month = $_GET['_m']; 
    $current_day = date('d'); // the actual day 
    $current_year = $_GET['_y']; 
    $future_year = 2016; 

    $startday = $current_year.$current_month.$current_day; 
    $endday = $future_year.$current_month.$current_day; 

    echo $startday; 
    echo $endday; 

} 
    $args = array(
     'post_type' => 'events', 
    'post_status' => 'publish', 
    'posts_per_page' => '10', 
    'meta_key' => 'event_date_ends', 
    'meta_query' => array( 
       'key' => 'event_date_ends', 
       'compare' => '>=', 
       'value' => $startday, 
       'type' => 'DATE' 
      ), 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 
); 

또는 B) 아니오 "이벤트"오늘날과 같이 여기 내 코드는 게시 된 항목이 반환됩니다.

대부분 캘린더 플러그인을 사용하지 않으려 고 노력하고 있습니다. 주로 대부분 리소스가 부피가 크고 클라이언트가 반환 값을 지정하기를 원하기 때문에 캘린더 플러그인을 찾을 수 없었습니다. 맞춤 설정이 가능했습니다. 시각적으로 승인되었지만 과거 이벤트는 자동으로 제거되지 않습니다.

는 UPDATE :

내가 YYYY-MM-DD로 고급 사용자 정의 필드의 날짜를 변환 할 수 있었다, 그러나 그것은 모든 "이벤트"

$args = array(
     'post_type' => 'events', 
    'post_status' => 'publish', 
    'posts_per_page' => '10', 
    'meta_query' => array(
       'key' => 'event_date_ends', 
       'compare' => '>=', 
       'value' => date(Y-m-d), 
       'type' => 'DATE' 
      ), 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 
); 
+0

가 참고로, 당신은 ACF 날짜를 저장하는 형식을 변경할 수 있습니다 내 쿼리입니다. – pmandell

+0

@pmandell 감사합니다. 나는 형식을 바꿀 수있었습니다! – svsdnb

답변

0

실제 문제를 발견하여 업데이트하겠다고 생각했습니다.

ACF 문서에서는 $ today = date ('Ymd')를 사용하여 날짜를 비교하지만 실제로 current_time ('Ymd')을 사용해야하므로 문제를 추가하고 해결 한 functions.php 코드를 제거했습니다. 그 일을 해결하십시오.

다음은 지금

$event1 = current_time('Ymd'); 
    $args = array(
     'post_type' => 'events', 
    'post_status' => 'publish', 
    'posts_per_page' => '10', 
    'meta_query' => array(
     array(
      'key' => 'event_date_ends', 
      'compare' => '>=', 
      'value' => $event1, 
      ) 
      ), 
    'meta_key' => 'event_date_ends', 
    'orderby' => 'meta_value', 
    'order' => 'ASC', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 
); 
1

을 반환하는 것이 코드를 사용, 난 그냥에 있었다 밝혀 이것을 functions.php를 통해 유닉스 타임 스탬프로 변환하면 효과가있다.

functions.php는

function custom_unixtimesamp ($post_id) { 
    if (get_post_type($post_id) == 'events') { 
    $startdate = get_post_meta($post_id, 'event_date_begins', true); 

     if($startdate) { 
      $dateparts = explode('/', $startdate); 
      $newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2]))); 
      update_post_meta($post_id, 'unixstartdate', $newdate1 ); 
     } 
    } 
} 
add_action('save_post', 'custom_unixtimesamp', 100, 2); 

는 바라건대 다른 사람이 유용하게 찾을 수
$today = time();  

    $args = array(
     'post_type' => 'events', 
    'post_status' => 'publish', 
    'posts_per_page' => '10', 
    'meta_query' => array(
     array(
      'key' => 'unixstartdate', 
      'compare' => '>=', 
      'value' => $today, 
      ) 
      ), 
    'meta_key' => 'event_date_begins', 
    'orderby' => 'meta_value', 
    'order' => 'ASC', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 
); 

를 쿼리합니다.