get_post casuale e ordinamento non funzionanti
Ho questo codice che restituisce un elenco di titoli di post come link, ma quando aggiungo i parametri 'orderby' e 'order' - restituisce i risultati ma 'orderby, order, rand' non funzionano, qualcuno può dirmi cosa sto sbagliando? Grazie!
<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>

Sì, questa è la sintassi corretta:
$args = array(
'orderby' => 'rand',
'order' => 'ASC'
);
query_posts( $args );
Tuttavia, i plugin possono impedire il corretto funzionamento. Prova a disattivare TUTTI i plugin e verifica se questo risolve il problema. Due plugin noti che impediscono il funzionamento di orderby=rand
sono Post Type Order
e WP_Sticky
.
Inoltre, se hai installato Post Types Order, assicurati di visitare la pagina di Amministrazione e controllare le impostazioni. Puoi utilizzare questo plugin ed evitare che riordini automaticamente i post:
http://img829.imageshack.us/img829/2616/pictureot.png
Quindi puoi utilizzare il codice per Post Types Order per ordinare specificamente quei post nei punti in cui è necessario che siano ordinati tramite custom/menu-order. Ecco il codice di esempio per quel plugin:
Il seguente codice PHP restituirà comunque il post nell'ordine impostato:
$args = array(
'post_type' => 'feature'
);
$my_query = new WP_Query($args);
while ($my_query->have_posts())
{
$my_query->the_post();
(..your code..)
}
Oppure:
$posts = get_posts($args);
foreach ($posts as $post)
{
(..your code..)
}
Se l'opzione "Auto Sort" è deselezionata, dovrai utilizzare i parametri "orderby" e "order":
$args = array(
'post_type' => 'feature',
'orderby' => 'menu_order',
'order' => 'ASC'
);

Grazie per la segnalazione. "Intuitive Custom Posts Order" è sicuramente la causa di questo problema!

Era stranamente specifico e corretto. Post Types Order era il colpevole. Grazie!

Non sto usando quel plugin, ma molti degli esempi su wordpress.org usano "sort_order" invece di "order", che non funzionava, mentre questo sì. Grazie.

Se sei ospitato su WP Engine, devi abilitare manualmente l'ordinamento casuale nelle tue impostazioni, altrimenti 'orderby' => 'rand'
non funzionerà.
https://wpexplorer-themes.com/total/docs/random-order-wpengine/

Perché non provi a usare query_posts invece?
Qualcosa come:
$args = array(
'orderby' => 'rand', // Ordina in modo casuale
'order' => 'ASC' // Ordine ascendente
);
query_posts( $args ); // Esegue la query con i parametri specificati

prova questo codice
<?php
// Rimuove tutti i filtri sull'ordinamento dei post
remove_all_filters('posts_orderby');
// Esegue la query con ordinamento casuale
query_posts('orderby=rand');
?>
ho trovato la risposta qui
http://www.reinaris.nl/wp/wordpress-random-post-order-not-working-orderbyrand/

Mi sono imbattuto nello stesso problema e fortunatamente ho trovato questo thread. Ho provato una soluzione diversa, probabilmente meno elegante delle altre, ma potrebbe essere utile in alcuni casi.
In sostanza, ho mescolato i post prima di visualizzarli:
<?php
$selectedPosts = get_posts($args);
shuffle($selectedPosts);
foreach ($selectedPosts as $selectedPost) :
setup_postdata( $selectedPost );
?>
<!-- elementi del post qui -->
<?php
endforeach;
wp_reset_postdata();
?>

Se hai wp-engine nel tuo sito WordPress, controlla l'opzione ALLOW ORDER BY RAND(). Vedi un articolo qui: https://wpengine.co.uk/support/about-order-by-rand/
