skip to Main Content

I like to set meta_query for 10 days after date stored in custom field.

I set like this, but it does not work.

Meta key ‘2a’ has value like ‘2022-02-15’.

<?php
$today = wp_date('Y-m-d');


$args = array(
'meta_query' => array(
                      'relation' => 'AND',


array(
    'key'=> '2a',
    'value' => array( date("Y-m-d", strtotime("+10 day", strtotime(get_post_meta($post->ID , '2a' ,true)))),  $today ),
    'compare' => '<=',
    'type' => 'DATE',
    ),

array(
    'key'=> '3a',
    'compare' => 'EXISTS'
    ),


                                                                                             
));?>

2

Answers


  1. Chosen as BEST ANSWER
    $today = wp_date('Y-m-d');
    $TenDaysBefore = date("Y-m-d", strtotime("-10 day", strtotime($today)));
    
    'key'=> '2a',
    'value' => $TenDaysBefore ,
    'compare' => '<=',
    'type' => 'DATE',
    

    Works now


  2. You’re passing two values into the date portion of your query which suggests you need to compare between as opposed to <=.

    I tend to find it’s better to perform calculations first and then pass the result into the query. Merging it all together as in your example makes it much harder to follow.

    While strtotime() will work, there are classes that make handling time easier and more readable.

    Example:

    // Keeping the code brief for the example but you'll probably want to do some checks here.
    $twoADate = new DateTimeImmutable( get_post_meta( $post->ID , '2a' ,true ) );
    
    $tenDaysLater = $twoADate->modify( '+10 days' )->format( 'Y-m-d' );
    $today = wp_date( 'Y-m-d' );
    
    $args = [
        'meta_query' => [
            'relation' => 'AND',
            [
                'key'=> '2a',
                'value' => [$tenDaysLater, $today],
                'compare' => 'BETWEEN',
                'type' => 'DATE', 
            ],
            [
                'key' => '3a',
                'compare' => 'EXISTS'
            ],
        ],
    ];
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search