WP_Query meta_query 날짜 범위(사용자 정의 필드 2개 포함)
start_date 및 end_date에 대한 사용자 지정 필드가 포함된 사용자 지정 게시 유형 'events'가 있습니다.저는 앞으로 있을 행사들의 간단한 목록을 작성하려고 합니다.오늘 start_date >=로 이벤트만 쿼리하면 잘 작동합니다.end_date <= today>로 모든 이벤트를 "AND"라고 말하기 위해 메타_query를 추가하면 아무것도 반환되지 않습니다.
내 사용자 지정 필드(start_date, end_date)는 유닉스 타임스탬프로 저장되므로 'NUMBERIC'과 'meta_value_num'을 사용합니다.오늘 $는 현재 날짜의 타임스탬프입니다.여기 제가 하려는 일의 예시가 있습니다.제 머리를 뽑고 있습니다. 어떤 도움이라도 주시면 감사하겠습니다!
작동 내용:
$args = array(
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'start_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'start_date',
'value' => $today,
'compare' => '>=',
'type' => 'NUMERIC',
),
)
);
meta_query에 대한 두 번째 배열을 추가할 때 - 작동하지 않음:
$args = array(
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'start_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'start_date',
'value' => $today,
'compare' => '>=',
'type' => 'NUMERIC',
),
array(
'key' => 'end_date',
'value' => $today,
'compare' => '<=',
'type' => 'NUMERIC',
),
)
);
메인 쿼리에서 meta_compare를 사용하고 단일 meta_query - 작동하지 않는 경우:
$args = array(
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'start_date',
'meta_value_num' => $today,
'meta_compare' => '>=',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'end_date',
'value' => $today,
'compare' => '<=',
'type' => 'date',
),
)
);
메인 쿼리에서 meta_compare를 사용하고 여러 개의 meta_query를 사용할 때 - 작동하지 않음:
$args = array(
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'start_date',
'meta_value_num' => $today,
'meta_compare' => '>=',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'start_date',
'value' => $today,
'compare' => '>=',
'type' => 'NUMERIC',
),
array(
'key' => 'end_date',
'value' => $today,
'compare' => '<=',
'type' => 'NUMERIC',
),
)
);
이렇게 사용하고 있는데 잘 작동합니다.
$the_query = new WP_Query(array(
'post_type' => 'job',
'posts_per_page' => 25,
'meta_query' => array(
array(
'key' => 'published_date',
'value' => array('20140401','20140405'),
'compare' => 'BETWEEN',
'type' => 'DATE'
)
)
));
if ($the_query->have_posts()) {
echo '<ul>';
while ($the_query->have_posts()) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
echo 'Sorry! No Posts';
}
wp_reset_postdata();
코덱스에서 가장 중요한 노트.
날짜가 YYYMMDD 형식으로 저장되고 이 형식으로 테스트되는 경우에만 '유형' 날짜가 '비교' 값과 함께 작동합니다.
제가 한 일은 이렇습니다.
$args = array(
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'start_date',
'meta_value_num' => $yesterday,
'meta_compare' => '<=',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'start_date',
'value' => array($first_minute,$last_minute),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
),
array(
'key' => 'end_date',
'value' => $yesterday,
'compare' => '>=',
'type' => 'NUMERIC',
),
array(
'key' => 'start_date',
'value' => $yesterday,
'compare' => '>=',
'type' => 'NUMERIC',
),
)
)
현재 한 달 동안의 이벤트를 가져옵니다.월 초분, 월 말 분, "어제" 11:59:59의 변수를 입력합니다.
오늘 또는 미래에 시작하여 오늘 또는 과거에 끝나는 이벤트(start_date >= $today)를 선택할 때 무엇을 시도하고 있는지 확실하지 않지만 어떤 것도 반환하지 않는 것이 논리적으로 보입니다.
알렉산드루 플로렌틴 포페스쿠의 말이 맞습니다!코드는 다음과 같이 사용합니다.
$args = array(
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'start_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'start_date',
'value' => $today,
'compare' => '<=',
'type' => 'NUMERIC',
),
array(
'key' => 'end_date',
'value' => $today,
'compare' => '>=',
'type' => 'NUMERIC',
),
));
두 어레이 모두에서 키 '비교'만 변경하면 됩니다.
언급URL : https://stackoverflow.com/questions/17657442/wp-query-meta-query-date-range-with-2-custom-fields
'programing' 카테고리의 다른 글
svg circle - 알려진 네이티브 속성이 아니므로 cx에 바인딩할 수 없습니다. (0) | 2023.10.16 |
---|---|
SQL*Plus가 실행 중인 시스템에서 환경 변수를 읽을 수 있습니까? (0) | 2023.10.16 |
j.트리거의 장점/차이 .trigger() vs.click() (0) | 2023.10.16 |
XmlSerializer를 사용하여 빈 xml 특성 값을 nullable int 속성으로 역직렬화 (0) | 2023.10.11 |
값이 숫자 범위 내에 있는지 확인합니다. (0) | 2023.10.11 |