get_post с произвольной сортировкой и порядком не работает
У меня есть код, который возвращает список заголовков записей в виде ссылок, но когда я добавляю параметры '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(); ?>">›› <?php the_title(); ?></a></li>
<?php endif ;?>
<?php endforeach; ?>
</ul>

Да, это правильный синтаксис:
$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'
);

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

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

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

Если ваш сайт размещён на WP Engine, вам необходимо вручную включить случайную сортировку в настройках, иначе параметр 'orderby' => 'rand'
не будет работать.
https://wpexplorer-themes.com/total/docs/random-order-wpengine/

Почему бы не попробовать использовать query_posts вместо этого?
Например так:
$args = array(
'orderby' => 'rand',
'order' => 'ASC'
);
query_posts( $args );

попробуйте этот код
<?php
remove_all_filters('posts_orderby'); // Удаляем все фильтры для сортировки записей
query_posts('orderby=rand'); // Запрашиваем записи в случайном порядке
?>
ответ взят отсюда
http://www.reinaris.nl/wp/wordpress-random-post-order-not-working-orderbyrand/

Я столкнулся с той же проблемой и, к счастью, нашел эту ветку обсуждения. Попробовал другое решение, возможно, менее элегантное, чем другие предложенные, но, возможно, полезное в некоторых случаях.
По сути, я перемешал записи перед их выводом:
<?php
$selectedPosts = get_posts($args);
shuffle($selectedPosts);
foreach ($selectedPosts as $selectedPost) :
setup_postdata( $selectedPost );
?>
<!-- здесь элементы записи -->
<?php
endforeach;
wp_reset_postdata();
?>

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