programing

WP_Query meta_query 날짜 범위(사용자 정의 필드 2개 포함)

oldcodes 2023. 10. 16. 22:02
반응형

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

반응형