Динамические переменные даты для пользовательского запроса типа post

#php #wordpress

#php #wordpress

Вопрос:

Я запрашиваю пользовательский тип сообщения с именем «события», который имеет мета-поле с именем «event_date», которое хранится в формате даты. Я хочу иметь три или четыре отдельных запроса, каждый из которых ищет сообщения в течение определенных периодов времени. Первым запросом будут все сообщения за текущий месяц, затем еще один за следующий месяц, затем следующий месяц и так далее. Важно, чтобы это были отдельные запросы, а не один.

Я могу запрашивать между установленными датами, используя приведенный ниже код, но я хочу сделать их динамическими и иметь возможность добавлять переменную даты начала и переменную даты окончания на основе текущей даты. Я думал об использовании чего-то похожего на этот код, с которым я столкнулся, который успешно дает мне название месяца, но я изо всех сил пытаюсь использовать это в своем запросе WordPress.

 <?php
$d = new DateTime( 'now' );
$d->modify( 'first day of this month' );
echo $d->format( 'F' ), "n";
?>
 

Могу ли я в любом случае интегрировать динамические переменные даты начала и даты окончания, которые могут быть текущим месяцем, 1, 2, 3 месяца и т. Д. По мере необходимости? Я ценю любую помощь, которую вы можете предоставить.

Мой код запроса:

 <?php
$args = array( 
    'post_type' => 'event',
    'meta_key' => 'event_date',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'showposts' => 20,
    'meta_query' => array(
    'relation' => 'AND',
        array(
            'key' => 'event_date',
            'value' => '2014-06-01', // Lowest date value
            'compare' => '>='
        ),
        array(
            'key' => 'event_date',
            'value' => '2014-06-31', // Highest date value
            'compare' => '<='
        )
    )
);
$event_posts = new WP_Query($args);

if($event_posts->have_posts()) : 
while($event_posts->have_posts()) : 
  $event_posts->the_post();
?>

POST CONTENT HERE

<?php
    endwhile;
    else: 
?>

Oops, there are no posts.

<?php
    endif;
    ?>
 

Ответ №1:

Взгляните на http://www.php.net/manual/function.mktime.php . Вы можете использовать что-то вроде этого:

 $month_add = 0; // current month, add value for the next months
$low_date = date("Y-m-d", mktime(12, 0, 0, date("n") $month_add, 1, date("Y")));
$high_date = date("Y-m-d", mktime(12, 0, 0, date("n") $month_add 1, 1, date("Y")));
 

Измените сравнение для самой высокой даты на:

 'compare' => '<'
 

Ответ №2:

используйте этот синтаксис … легко читается и используется:

 array(
        'key' => 'event_date',
        'value' => date('Y-m-d',strtotime(' 1 month')), 
        'compare' => '<='
    )
 

получайте удовольствие, играя с ним и проверяйте относительные форматы для всех ваших возможностей