Использование категорий и "прилипчивости" вместе
У меня есть пользовательский запрос на моей домашней странице, показывающий все сообщения в определенной категории. Мне нужен этот запрос, чтобы уважать липкие сообщения, но, судя по моим исследованиям, запросы категорий игнорируют липкость. Мой вопрос в два (с половиной) раза:
- Может ли кто-нибудь сказать мне, где/как в базе данных применяется клейкость к сообщению? Я не вижу этого в
wp_postmeta
илиwp_posts
. Это самое важное, и, вероятно, этого будет достаточно, чтобы вы выигралипринято ответ. - Есть ли какой-нибудь простой элегантный способ захватывать липкие сообщения только из определенной категории?
- Если нет, то как насчет уродливого способа сделать это?
Просто так, вот мой вопрос, хотя я думаю, что это не повлияет на ответ.
$getHighlights = array(
'posts_per_page' => 7,
'post_type' => array('post','Event'),
'category_name' => 'Highlights',
);
Извините за длинное название, но я хотел уточнить, о чем я просил.
2 answers
Просто добавьте 'post__in' => get_option('sticky_posts')
в свой запрос, чтобы ограничить ваш запрос только липкими сообщениями. Итак,
$getHighlights = array(
'numberposts' => 7,
'post_type' => array('post','Event'),
'post__in' => get_option('sticky_posts'),
'category_name' => 'Highlights'
);
Должно работать на вас.
Редактировать: Вот как вы можете объединить два массива, чтобы получить липкие сообщения в верхней части вашего запроса:
$getHighlights_sticky = get_posts( array(
'numberposts' => 7,
'post_type' => array('post','Event'),
'post__in' => get_option('sticky_posts'),//it should be post__in but not posts__in
'category_name' => 'Highlights'
));
$getHighlights_other = get_posts( array(
'numberposts' => 7 - count( $getHighlights_sticky ),
'post_type' => array('post','Event'),
'post__not_in' => get_option('sticky_posts'),//it should be post__not_in but not posts__not_in
'category_name' => 'Highlights'
));
foreach ( array_merge( $getHighlights_sticky, $getHighlights_other ) as $post ) {
setup_postdata( $post );
// your display loop
}
Здесь будет показано 7 сообщений с наклейками вверху (конечно, это при условии, что у вас не более 7 наклеек, иначе все будет испорчено...) (отредактировано для использования numberposts
согласно комментарию OP ниже...)
Sticky не сохраняется для каждой записи, есть опция sticky_posts
, которая содержит массив таких. Так что вы можете получить это с помощью $sticky_posts = get_option('sticky_posts');
Смотрите Параметры липкой записи в Кодексе для получения подробной информации о запросе липких записей.
Я не совсем уверен, какой был бы наилучший подход, чтобы ваш запрос уважал прилипчивость. При беглом взгляде на код, скорее всего, is_home
условное переопределяется, и это начинает прилипать. Возможно, удастся где-нибудь зацепиться и подделать это условие, но это может сломаться что-то еще в обработке.