Использование категорий и "прилипчивости" вместе


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

  1. Может ли кто-нибудь сказать мне, где/как в базе данных применяется клейкость к сообщению? Я не вижу этого в wp_postmeta или wp_posts. Это самое важное, и, вероятно, этого будет достаточно, чтобы вы выиграли принято ответ.
  2. Есть ли какой-нибудь простой элегантный способ захватывать липкие сообщения только из определенной категории?
  3. Если нет, то как насчет уродливого способа сделать это?

Просто так, вот мой вопрос, хотя я думаю, что это не повлияет на ответ.

$getHighlights = array(
    'posts_per_page' => 7,
    'post_type' => array('post','Event'),
    'category_name' => 'Highlights', 
);

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

Author: JakeParis, 2011-01-06

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 ниже...)

 9
Author: goldenapples, 2013-12-31 16:27:23

Sticky не сохраняется для каждой записи, есть опция sticky_posts, которая содержит массив таких. Так что вы можете получить это с помощью $sticky_posts = get_option('sticky_posts');

Смотрите Параметры липкой записи в Кодексе для получения подробной информации о запросе липких записей.

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

 2
Author: Rarst, 2011-01-06 23:35:18