Wp запросов постов между датами, но любой год - PullRequest
0 голосов
/ 06 апреля 2020

Я использую ACF pro и мне нужно запрашивать сообщения, которые имеют определенные поля ACF определенного значения. Но также мне нужно получать сообщения, которые имеют ЛЮБОЙ год, но дата должна быть между сегодняшним днем ​​и + 30 днями с сегодняшнего дня. Я не могу использовать stati c номер месяца, потому что тогда, если сообщение будет сделано в первый день, оно не найдет его заранее. Вот мой первоначальный запрос, который не работает. Это работает, если только получить определенный год и месяц, но он получает только сообщения с этой датой.

//$date_month_advance_month = ... month number of today + 30 days
//$date_month_advance_day= ... day number of today + 30 days
    // args
    $args = array(
        'post_type'     => 'my_post_type',
        'posts_per_page'=> -1,
        'meta_key'      => 'status',
        'meta_value'    => 'accepted',
        'date_query' => array(
         'compare'   => 'BETWEEN',
                 array(
                     'month' => $date_today_month,
                     'day'   => $date_today_day,
                 ),
                array(
                    'month' => $date_month_advance_month,
                    'day'   => $date_month_advance_day,
                ),
            ),
    );

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете создать пользовательский query. Я сделал один быстро, проверил на дату, но не настраиваемое поле status, так как у меня его нет. Замените my_post_type на имя типа вашего сообщения.

global $wpdb;

$query = "
SELECT * FROM {$wpdb->posts} as p
LEFT JOIN {$wpdb->postmeta} as pm
ON pm.post_id = p.ID
WHERE p.post_type = 'my_post_type'
AND pm.meta_key = 'status'
AND pm.meta_value = 'accepted'
AND REPLACE(SUBSTRING(p.post_date, 6, 10), '-', '') BETWEEN %s AND %s
GROUP BY p.ID
";

// Should replace 0301 and 0331 by variables (date('mO1') and date('m31') for example), I let you handle this.
$prepared_query = $wpdb->prepare($query, array('0301', '0331'));

$result = $wpdb->get_results($prepared_query);

foreach($result as $r) {
  $cs_post = get_post($r->ID);

  echo '<p>';
  echo get_the_title($cs_post->ID) .'<br>';
  echo get_the_date('Y-m-d', $cs_post->ID) .'<br>';
  echo '</p>';

}

Не уверен, что это правильный путь, но он работает.

...