¿A qué se puede deber que muestre bien "los más comentados", pero "los más leidos" sean aleatorios, y cada vez que refresco se vean diferentes?
pues porque no hay forma, de manera nativa saber cual fue el post mas leido, y utiliza orderby=rand, para crear esa sensacion, pero el usuario habtual o el que recarge, vera que no corresponde. ya que mostrara otros resultados.
hay una forma bastante simple de hacerlo, con los campos personalizados, pero los post se empezaran a contar desde el momento en el que se instale, aunque se puede modificar facilmente, para añadir los post que nos interese, solo se tiene que cambiar el valor del campo personalizado visitas.
este es el codigo, a lo simple, muy mejorable pero funcional
añadimos este codigo al header, justo depues de la etiqueta <body>
PHP:
if(is_single()){
$post_id = get_the_ID();
$visitas = get_post_meta($post_id, 'visitas', true);
update_post_meta($post_id, 'visitas', $visitas+1);
}
con este codigo se comprueba si estamos en una entrada, si es asi, mete en una variable el valor del campo personalizado visitas, y lo actualiza sumandole 1.
Con eso ya vamos obteniendo un valor de referencia, para poder saber cual es el post que mas visitas tiene.
y ahora solo tenemos que sustituir
PHP:
new WP_Query("orderby=rand&posts_per_page=5")
por
PHP:
new WP_Query("meta_key=visitas&orderby=meta_value_num&order=DESC&posts_per_page=5")
Lo que se ha cambiado es, que en vez de que muestre los post en random, lo que hace es ordenarlos teniendo en cuenta un campo personalizado, en este caso visitas,(meta_key), y que los ordene por valor numerico, (ordeby=meta_value_num) y que los ordene (Desc), y que muestre 5 post por pagina
Repito, es algo muy simple y basico, y mejorable, pero es funcional, con un poco mas de codigo, puedes hacer que muestre los post por semana, por mes, fechas en concreto, y ordenados por los mas vistos