Как выводить sticky записи первыми в wp_query?

3 мая 2013 г., 12:37:19
Просмотры: 14.4K
Голосов: -4

Я долго искал, но не смог найти решение. Я не программист. Пожалуйста, помогите. Вот мой код wp_query:

$my_query = new WP_Query('category_name=animals&showposts=10');
while ($my_query->have_posts()) : 
    $my_query->the_post();
    $do_not_duplicate = $post->ID; ?> 
    <li><a href="<?php the_permalink()?>"><?php the_title(); ?></a></li><?php 
endwhile; ?> 
0
Все ответы на вопрос 2
0

Не совсем понятно, что именно вы пытаетесь сделать, но закрепленные записи по умолчанию должны отображаться вверху — то есть первыми — если вы специально не предотвратили такое поведение. Это стандартное поведение. Я проверил это с вашим запросом, изменив только ID категории на существующую на моем сервере.

Чтобы отключить эту особенность закрепленных записей — то есть добиться противоположного поведения — вы можете передать параметр в WP_Query:

$my_query = new WP_Query('category_name=animals&showposts=10&ignore_sticky_posts=true');

Или установить значение перед выполнением запроса:

$my_query->set('ignore_sticky_posts',true); // $my_query может быть любой переменной с экземпляром WP_Query.

Попробуйте поискать в теме и плагинах ignore_sticky_posts, возможно что-то вмешивается в запрос.

Также можно попробовать принудительно включить обработку закрепленных записей:

function force_sticky_wpse_98187($qry) {
  $qry->set('ignore_sticky_posts',false);
}
add_action('pre_get_posts','force_sticky_wpse_98187',1000);

Это добавляет фильтр с искусственно высоким приоритетом, чтобы он выполнялся последним на этом хуке. Не знаю, сработает ли это. Код совершенно не тестировался. Также это изменение (если сработает) повлияет на все запросы, что вероятно слишком агрессивно. Вам нужно добавить дополнительные условия, чтобы ограничить его выполнение.

3 мая 2013 г. 16:47:59
4
$category = get_cat_ID('животные');

// Запрос

$args = array('post__in' => get_option( 'sticky_posts' ),
'ignore_sticky_posts' => 1, 'order' => 'ASC' , 'cat' => $category);
query_posts( $args );

// Цикл
while ( have_posts() ) : the_post();
?>
    <div id="sticky_title"><h1><?php the_title();?></h1></div>
    <div id="sticky_excerpt"><p><?php the_excerpt(); ?></p></div>
<?php

endwhile;

// Сброс запроса

wp_reset_query();
3 мая 2013 г. 13:02:32
Комментарии

спасибо за ответ, но я не совсем понял.

İlkay Çay İlkay Çay
3 мая 2013 г. 13:10:46

что у тебя получается

Balas Balas
3 мая 2013 г. 13:32:28

я попробовал этот код, он работает, но не совсем хорошо. когда я делаю пост 'sticky', этот код отображает только 'sticky' посты. а мне нужно отображать 10 постов из категории 'animal', но чтобы sticky посты были вверху

İlkay Çay İlkay Çay
3 мая 2013 г. 14:43:19

@BOTH Пожалуйста, используйте правильное форматирование (визуальный редактор WYSIWYG, ссылка "помощь" для дополнительной информации), заглавные и строчные буквы. Это не чат, а справочный материал для будущих читателей. Спасибо.

kaiser kaiser
3 мая 2013 г. 16:24:07