get_post с произвольной сортировкой и порядком не работает

23 мар. 2011 г., 09:46:45
Просмотры: 63.9K
Голосов: 11

У меня есть код, который возвращает список заголовков записей в виде ссылок, но когда я добавляю параметры 'orderby' и 'order' - он возвращает результаты, но 'orderby, order, rand' не работают. Кто-нибудь может сказать, что я делаю неправильно? Спасибо!

<ul>
   <?php $post; $cat_posts = get_posts(array('numberposts' => 10, 'orderby' => 'rand', 'order' => ASC, 'category' => $disciplineCatID));
   foreach($cat_posts as $post) : ?>
   <?php $postTitle = get_the_title(); if($title != $postTitle) :?>
   <li><a href="<?php the_permalink(); ?>">&rsaquo;&rsaquo; <?php the_title(); ?></a></li>
   <?php endif ;?>
   <?php endforeach; ?>
</ul>
3
Комментарии

Отсутствуют одинарные кавычки вокруг ASC.. просто опечатка или возможно связано с проблемой?

t31os t31os
23 мар. 2011 г. 12:49:12

Не могли бы вы уточнить, что именно не работает (например, ваш код не возвращает результаты или ...)?

Manzabar Manzabar
23 мар. 2011 г. 14:55:23

@t31los, попробовал с кавычками - спасибо, но все равно не сработало. @Manzabar - спасибо - я обновил информацию. Результаты возвращаются, но параметры 'order, orderby, rand' не применяются. Спасибо.

User User
23 мар. 2011 г. 15:43:21
Все ответы на вопрос 7
3
22

Да, это правильный синтаксис:

$args = array(
    'orderby' => 'rand',
    'order'    => 'ASC'
);
query_posts( $args );

Однако плагины могут мешать корректной работе этого кода. Попробуйте отключить ВСЕ плагины и проверьте, поможет ли это. Два известных плагина, которые могут препятствовать работе orderby=rand — это Post Type Order и WP_Sticky.

Кроме того, если у вас установлен Post Types Order, обязательно зайдите на страницу настроек в админке и проверьте параметры. Вы можете использовать этот плагин, но отключить автоматическую сортировку записей:

http://img829.imageshack.us/img829/2616/pictureot.png

Затем вы можете использовать код для Post Types Order, чтобы явно сортировать записи там, где вам нужно, используя пользовательский/меню-порядок. Вот пример кода для этого плагина:

Следующий PHP-код всё равно вернёт записи в установленном порядке:

$args = array(
'post_type' => 'feature'
);

$my_query = new WP_Query($args);
while ($my_query->have_posts())
{
$my_query->the_post();
(..ваш код..)          
}

Или:

$posts = get_posts($args);
foreach ($posts as $post)
{
(..ваш код..)     
}

Если опция "Автосортировка" отключена, вам нужно будет использовать параметры "orderby" и "order":

$args = array(
'post_type' => 'feature',
'orderby'   => 'menu_order',
'order'     => 'ASC'
);
22 окт. 2011 г. 02:12:15
Комментарии

Спасибо за подсказку. "Intuitive Custom Posts Order" определенно вызывает эту проблему!

Mr_Chimp Mr_Chimp
25 авг. 2015 г. 13:53:31

Это было удивительно точно. Плагин Post Types Order оказался виновником. Спасибо!

Allen Gingrich Allen Gingrich
10 нояб. 2016 г. 22:53:59

Я не использую этот плагин, но многие примеры на wordpress.org используют "sort_order" вместо "order", что не работало, а ваш вариант сработал. Спасибо.

dw1 dw1
9 мар. 2017 г. 09:51:49
3

Если ваш сайт размещён на WP Engine, вам необходимо вручную включить случайную сортировку в настройках, иначе параметр 'orderby' => 'rand' не будет работать.

https://wpexplorer-themes.com/total/docs/random-order-wpengine/

20 февр. 2020 г. 17:55:56
Комментарии

спасибо, это помогло.

M Haseeb M Haseeb
29 апр. 2020 г. 23:19:32

После как минимум часа мучений... СПАСИБО!!

KVDD KVDD
26 мая 2021 г. 08:03:45

Спасибо, спасибо, спасибо! Уверен, вы сэкономили мне час-два!

Shane McCurdy Shane McCurdy
27 июл. 2021 г. 06:39:11
1

Почему бы не попробовать использовать query_posts вместо этого?

Например так:

$args = array(
    'orderby' => 'rand',
    'order'    => 'ASC'
);
query_posts( $args );
23 мар. 2011 г. 16:02:36
Комментарии

Спасибо всем за помощь, это я был глуп - конфликт возник с плагином 'Post Type Order' (Упорядочивание объектов типов записей с помощью перетаскиваемой сортировки на JavaScript)

User User
25 мар. 2011 г. 11:18:07
0

попробуйте этот код

<?php 
   remove_all_filters('posts_orderby'); // Удаляем все фильтры для сортировки записей
   query_posts('orderby=rand'); // Запрашиваем записи в случайном порядке
?>

ответ взят отсюда

http://www.reinaris.nl/wp/wordpress-random-post-order-not-working-orderbyrand/

28 нояб. 2011 г. 19:06:22
0

Вероятно, вы забыли использовать setup_postdata внутри цикла foreach, чтобы работали шаблонные теги.

28 нояб. 2011 г. 19:10:51
0

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

По сути, я перемешал записи перед их выводом:

<?php 
    $selectedPosts = get_posts($args);
    shuffle($selectedPosts);

    foreach ($selectedPosts as $selectedPost) : 
    setup_postdata( $selectedPost );
?>

<!-- здесь элементы записи -->

<?php 
    endforeach;
    wp_reset_postdata();
?>
9 янв. 2016 г. 16:54:35
0

Если ваш сайт на WordPress использует wp-engine, проверьте опцию ALLOW ORDER BY RAND(). Подробнее об этом можно прочитать в статье: https://wpengine.co.uk/support/about-order-by-rand/

3 янв. 2019 г. 12:27:09