Отображать все публикации пользовательского типа и упорядочивать их по необязательному мета-ключу


У меня есть пользовательский тип записи (CPT) под названием property. Я зарегистрировал для него признанное свойство metabox, как описано в этом вопросе" Как мне создать избранную публикацию в пользовательском типе публикации?". Таким образом, признанное свойство имеет meta_key='property_featured' и meta_value=on.

Что я хотел бы сделать, так это отобразить все property сообщения, но упорядочивайте их по meta_key='property_featured'. Таким образом, рекомендуемые свойства будут отображаться первыми в списке на первой странице. Аналогичное поведение, как Sticky Posts функциональность. И все остальные property сообщения будут упорядочены по дате создания. Кроме того, мне нужно убедиться, что разбивка на страницы работает правильно - обрабатывая все сообщения property вместе. Я использую пользовательский код разбиения на страницы, объясненный здесь. (Надеюсь, это имеет смысл).

Я попытался указать аргументы для WP_Query. Однако, если я укажу:

'meta_key' => 'property_featured',
'orderby' => 'meta_value'

Тогда только property сообщения с этим ключом отображаются напротив всех property сообщения.

Если я удалите meta_key из аргументов, тогда запрос не знает, по чему их сортировать.

Как мне отобразить все сообщения property, убедившись, что сообщения featured отображаются первыми, а все остальные сообщения property упорядочены по дате публикации?

Большое спасибо, Даша

Author: Community, 2011-05-02

2 answers

<?php
// query posts
$query_property = query_posts( array( 
     'orderby'    => 'date meta_value' // orderby date AND meta value
) );

// First loop
$query_feat = $query_string.'&meta_value=on&meta_key=property_featured';
// Offset for second loop
$query_all = $query_string.'&offset=3&meta_key=property_featured';

// First loop
if ( $query_feat->have_posts() : while ( $query_feat->have_posts() ) : # etc....
    // do stuff
endif;

// Second loop
if ( $query_all->have_posts() : while ( $query_all->have_posts() ) : # etc....
    // do stuff
endif;
?>
 1
Author: kaiser, 2011-05-02 14:51:06

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

Стикеры - это точное сравнение, но обратите внимание, что они обрабатываются не SQL-запросом, а совершенно отдельным кодом - они переупорядочиваются, извлекаются и применяются к результатам уже выполненного запроса.

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

 -1
Author: Rarst, 2011-05-02 14:50:32