Мне нужно выбрать должности в течение двух разных месяцев (текущий, прошлый). Насколько я знаю, невозможно передать параметр m
date в виде массива целого числа вместо целого числа, поэтому я выполняю два разных запроса и получаю все сообщения, возвращенные в один и тот же массив.
Вопрос в том, как изменить порядок результирующего пула сообщений? Простое нажатие второго пула в массив, возвращенный первым запросом, недостаточно, так как аргумент orderby
находит разрыв в соединении двух массивов.
Я попытался использовать usort
но я получаю сообщение о том, что You can't use WP_Post object as an array
.
Есть идеи?
Благодаря,
Вот как я подхожу к нему:
function my_pseudo_date_query( $where, $query ) { global $wpdb; $dq = $query->get('my_date_query'); if( $dq && !empty( $dq['after'] ) ){ $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_date >= %s" $dq['after'] ); } if( $dq && !empty( $dq['before'] ) ){ $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_date <= %s", $dq['before'] ); } return $where; } add_filter( 'post_where', 'my_pseudo_date_query', 10, 2 );
$now = new DateTime( 'now' ); $first_of_last_month = new DateTime( 'first day of last month' ); $my_query = new WP_Query( array( 'my_date_query' => array( 'before' => $now->format( 'Ymd H:i:s' ), 'after' => $first_of_last_month->format( 'Ymd H:i:s' ), ); ) );
В этом примере аргумент before лишний.
before
и after
атрибута my_date_query
довольно строгие. Они должны быть в Ymd H:i:s
(php). Но этого достаточно. date_query
в качестве аргумента. Вышеупомянутый код является «совместимым с my_
» в том смысле, что после обновления до 3.7 вы можете удалить префикс my_
из примера. get_posts()
, не забудьте установить suppress_filters
в false .