Отображать все публикации пользовательского типа и упорядочивать их по необязательному мета-ключу
У меня есть пользовательский тип записи (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
упорядочены по дате публикации?
Большое спасибо, Даша
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;
?>
Я думаю, что то, что вы пытаетесь сделать с ней, немного слишком сложно. По сути, вы хотите, чтобы применялись два порядка сортировки (мета- и дата). Также я думаю, что порядок по мета-значению не будет работать для сообщений, которые вообще не имеют такого значения.
Стикеры - это точное сравнение, но обратите внимание, что они обрабатываются не SQL-запросом, а совершенно отдельным кодом - они переупорядочиваются, извлекаются и применяются к результатам уже выполненного запроса.
Если только вы не хотите раскошелиться и переписать стикеры логика Я думаю, что самым простым способом было бы переместить ваши избранные посты в отдельный цикл.