Intereting Posts
Добавление «ответа на» в письме Почему я получаю синтаксическую ошибку, неожиданное «endwhile» (T_ENDWHILE) в этом шаблоне? WordPress: применить фильтр / привязку к конкретным виджетам боковой панели? Разрешить разные теги <span> в заголовках виджетов permalink% year% от предварительно написанных должностей, которые будут опубликованы в следующем году, в загадочном будущем (*) аргумент tax_input для wp_insert_post () Создать форму aa для пользовательских терминов таксономии Настроить имена полей на странице редактирования профиля бэкэнда через функцию.php Добавить пользовательский столбец в список пользовательских сообщений Привилегированные эскалации ошибок в 2,9? Каков наилучший способ запроса сообщений на основе живых данных? Проверьте, является ли текущее сообщение последним (не последним) Удалить действие из YITH Woocommerce Платежи по вкладам и авансовым платежам Создайте галерею с помощью Custom Post Type и добавьте галерею сумм в качестве вспомогательной галереи Main Gallery Архивная разбивка на страницы не работает

Wp_query: сортировка по переменной PHP

Вот моя проблема:

Для моих статей я использую персонализированные публикации типа «выставки» и сообщения для всех других новостей. Я показываю их в одном запросе ['post_type' = array ('Exhibitions', 'posts')].

Параметром orderby для сообщений должна быть дата публикации , для выставок это должно быть обычная метазначащая (дата окончания проекта). Таким образом, сообщения будут отображаться в следующем порядке:

  1. Выставка 1 (дата публикации: 2.1. 2013, дата окончания: 4.4. 2013)
  2. Сообщение 1 (дата публикации: 13.3. 2013)
  3. Выставка 2 (дата публикации: 1.4. 2012, дата окончания: 1.3. 2013)
  4. Сообщение 2 (дата публикации: 28.2. 2013)

Определить переменную PHP из даты (постов) и метаданных даты окончания (выставок), а затем отсортировать их?

Я придумал идею определить переменную PHP (метаданные даты окончания для выставок, опубликовать дату для сообщений) и отсортировать wp_query.

Я иду в правильном направлении или нет? Если да, то как включить переменную в wp_query? Я нашел некоторые связанные статьи / вопросы, но никто из них не помог мне до сих пор.

Фильтр по заказу?

Фильтр Orderby также звучит как способ: Orderby filter @ WordPress.org forums

Благодаря!

///

Решения Йоханнесса – это в значительной степени то, к чему я стремился. Вот моя слегка измененная функция:

function save_sort_meta( $post_id ) { $prev_val = get_post_meta( $post_id, 'sort_date', true ); /* set value only if not set yet (ie if this is a new post and not an update ) */ if ( 'exhibitions' === $_POST['post_type'] ) { $my_meta = get_post_meta( $post_id, '_my_meta', true ); $datum_end_hidden = $my_meta['datum-end-hidden']; update_post_meta( $post_id, 'sort_date', $datum_end_hidden); } else { /* using time() assuming "end_date" is a unix timestamp, adjust if not */ update_post_meta( $post_id, 'sort_date', time()); } } add_action( 'save_post', 'save_sort_meta' ); 

И вот мой вопрос:

 $args = array( 'showposts' => '22', 'post_type' => array('post','exhibitions'), 'post_status' => 'publish', 'meta_key' => 'sort_date', 'order' => 'DESC', 'orderby' => 'meta_value_num' ); 

По какой-то причине сообщения «post» остаются в конце wp_query (хотя, когда я эхо настраиваю значение «sort_date», оно отображается правильно и больше, чем выставки, которые должны оставаться «ниже»).

Имеет ли он связь с моим удалением проверки обновления сообщения? Я сделал это, потому что я хочу изменить значения и на обновление.

Изменить: работает код выше!

Хорошо, я узнал, где была проблема – это довольно смущающе. 🙂 Значения «даты окончания» метаданных типа «выставки» были предоставлены jQuery UI Datepicker – который сохраняет дату в миллисекундах.

Все, что мне нужно было сделать, это разделить $ datum_end_hidden на 1000. 🙂

Большое спасибо!

Solutions Collecting From Web of "Wp_query: сортировка по переменной PHP"

Насколько я знаю, вы не можете сортировать запрос по двум различным параметрам без дополнительной итерации по извлеченным сообщениям.

Поскольку этого следует избегать, позвольте мне предложить другой подход:

Как насчет включения дополнительного метазначения «sort_date» или тому подобного? И затем, в вашей экономии, сохраните дату окончания выставки или дату публикации как «sort_date».

Сохранение:

 function save_sort_meta( $post_id ) { $prev_val = get_post_meta( $post_id, 'sort_date', true ); /* set value only if not set yet (ie if this is a new post and not an update ) */ if ( empty($prev_val) ) { if ( 'exhibitions' === $_POST['post_type'] ) { update_post_meta( $post_id, 'sort_date', $_POST['end_date'] ); } else { /* using time() assuming "end_date" is a unix timestamp, adjust if not */ update_post_meta( $post_id, 'sort_date', time() ); } } } add_action( 'save_post', 'save_sort_meta' ); 

Запрос:

 $args = array( 'post_status' => 'publish', 'post_type' = array( 'exhibitions', 'posts' ), 'meta_key' => 'sort_date', 'order' => 'DESC', 'orderby' => 'meta_value_num' ); $exhibitions_and_posts = new WP_Query( $args ); 

В стороне, я бы рекомендовал, чтобы тип сообщения был уникальным.

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

Если вы показываете выставки в своем собственном архиве, например archive-exhibitions.php, вы можете задать запрос для этой страницы для сортировки по указанному вами мета-значению.

 $args = array( 'post_status' => 'publish', 'post_type' => 'exhibition', 'meta_key' => 'project_end_date', 'orderby' => 'meta_value', 'order' => 'DESC' ); $my_own_query = new WP_Query($args); 

Естественно, измените project_end_date чтобы отобразить ключевое имя вашего метаданного даты конца проекта. Измените meta_value_num на meta_value_num зависимости от того, как вы сохраните переменную. meta_value , вероятно, отлично.

Для Loop вам необходимо использовать:

 <?php if ($my_own_query->have_posts()) : while ($my_own_query->have_posts()) : $my_own_query->the_post(); ?> 

Теперь загрузка этого архива ( http://example.com/exhibitions/ ) будет игнорировать обычный WP_Query и использовать ваш my_own_query для цикла.