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:

Read More
$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.

Related posts

Leave a Reply

2 comments

  1. 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'
            ),
        )
    
  2. 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'
    );