Intereting Posts
Вызов неопределенной функции get_header () в index.php Как остановить WooCommerce / WordPress от изменения размера изображения продукта? Пользовательский SQL-запрос для получения списка сообщений с отображаемым URL-адресом изображения Как обновить медиа-ссылки в WordPress после миграции? сохранять значения querystring, когда savincustom options в admin Добавить пользовательские теги ajax на экране вложения мультимедиа Разрешить HTML в выдержке Почему WP customizer postMessage не работает? Правильный способ перемещения сайта Bootstrap в WordPress Поддержка старых версий WordPress в плагине / Theme? Переопределение файла шаблона CPT через functions.php Установите первое изображение (внешнее) в качестве отображаемого изображения / эскиза Настроить или удалить новое уведомление по электронной почте администратора Запрос MySQL для установки wp_postmeta с использованием значения term_taxonomy_id Как изменить значения базы данных при обновлении темы

Как переставить пул сообщений, соединенных двумя запросами?

Мне нужно выбрать должности в течение двух разных месяцев (текущий, прошлый). Насколько я знаю, невозможно передать параметр m date в виде массива целого числа вместо целого числа, поэтому я выполняю два разных запроса и получаю все сообщения, возвращенные в один и тот же массив.

Вопрос в том, как изменить порядок результирующего пула сообщений? Простое нажатие второго пула в массив, возвращенный первым запросом, недостаточно, так как аргумент orderby находит разрыв в соединении двух массивов.

Я попытался использовать usort но я получаю сообщение о том, что You can't use WP_Post object as an array .

Есть идеи?

Благодаря,

Solutions Collecting From Web of "Как переставить пул сообщений, соединенных двумя запросами?"

Вот как я подхожу к нему:

Код

 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 лишний.

замечания

  1. Это не было проверено, это код «в принципе».
  2. Я был здесь довольно ленив, и ключи before и after атрибута my_date_query довольно строгие. Они должны быть в Ymd H:i:s (php). Но этого достаточно.
  3. Как отмечено в комментариях, WordPress 3.7 предоставит date_query в качестве аргумента. Вышеупомянутый код является «совместимым с my_ » в том смысле, что после обновления до 3.7 вы можете удалить префикс my_ из примера.
  4. В примере предполагается PHP5.3 + . Хотя его довольно просто обойти это ограничение.
  5. Если вы используете с get_posts() , не забудьте установить suppress_filters в false .