mitopp
mitopp

Reputation: 131

WordPress Meta-Query between 2 dates

I have currently a small problem understanding with meta-queries by WordPress. Initial situation:

A Custom Post Type with 2 meta-Fields (offer_start-date, offer_end-date) The CPT is intended as an offer, which should be displayed in the specified time period (between start-date and end-date) . The date here is formatted in german format DD.MM.YYYY. For that I use currently following query:

$args = array(
    'post_type'         => 'offer',
    'posts_per_page'    => -1,
    'post_status'       => 'publish',
    'order'             => 'DESC',
    'meta_query'        => array(
        array(
            'key'       => 'offer_start-date',
            'value'     => date( 'd.m.Y', time() ),
            'type'      => 'numeric',
            'compare'   => '<='
        ),
        array(
            'key'       => 'offer_end-date',
            'value'     => date( 'd.m.Y', time() ),
            'type'      => 'numeric',
            'compare'   => '>='
        )
    )
);
new WP_Query( $args );

Unfortunately, the query does not yield reliable results. I can not even say 100% why. On some days all offers appear, on other days there are no offers.

I have also tried to find out the cause of the problem in the Codex, but it seems I am a strong blockhead.

Upvotes: 12

Views: 19218

Answers (2)

Grigoriy
Grigoriy

Reputation: 111

This below solution may be handy to someone

$args = array(
'cat' => $cat_ID,
'meta_query' => array(
    'relation' => 'AND',
    array(
        'key'     => 'date_from',
        'value'   => date("Y-m-d H:i:s"),
        'compare' => '<=',
        'type'    => 'DATE'
    ),
    array(
        'key'     => 'date_to',
        'value'   => date("Y-m-d H:i:s"),
        'compare' => '>=',
        'type'    => 'DATE'
    )
),
'orderby' => 'date',
'order' => 'DESC'
);

Upvotes: 11

Otto
Otto

Reputation: 353

If you need tu use between just use like that:

'meta_query' => array(
        array(
            'key' => 'event_date',
            'value' => array(date('d/m/Y'), date('d/m/Y', strtotime('28 days'))),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        ),
    )

Upvotes: 14

Related Questions