PHP - Código para generar un orden aleatorio

 
Vista:
sin imagen de perfil

Código para generar un orden aleatorio

Publicado por clau (3 intervenciones) el 11/07/2016 11:04:47
Hola chicos, acabo de entrar en el foro porque no doy con la solución a algo que quiero hacer. Tal vez vosotros sí. Me encuentro con la necesidad de solucionar una pequeña funcionalidad para una web propia que quiero sacar a la luz. Tengo unas entradas hechas en Wordpress que aparecen siempre ordenadas por fecha de creación, y quiero que aparezcan por defecto de forma aleatoria.

Creo que debe ser muy simple de solucionar por alguien que domine un poco el tema. Yo no controlo PHP, he intentado cambiar cosas por intuición, pero no me aclaro. Os pego el código por si me podéis ayudar. Gracias!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
 * display the category page listing by ordering wise.
 */
function directory_category_filter_orderby($orderby){
global $wpdb,$wp_query;
if (isset($_REQUEST['directory_sortby']) && ($_REQUEST['directory_sortby'] == 'title_asc' || $_REQUEST['directory_sortby'] == 'alphabetical'))
{
$orderby= "(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id=$wpdb->posts.ID and $wpdb->postmeta.meta_key = 'featured_c' AND $wpdb->postmeta.meta_value = 'c') DESC, $wpdb->posts.post_title ASC";
//$orderby= "$wpdb->posts.post_title ASC,(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id=$wpdb->posts.ID and $wpdb->postmeta.meta_key = 'featured_c' AND $wpdb->postmeta.meta_value = 'c') DESC";
}
elseif (isset($_REQUEST['directory_sortby']) && $_REQUEST['directory_sortby'] == 'title_desc' )
{
$orderby = "$wpdb->posts.post_title DESC,(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id=$wpdb->posts.ID and $wpdb->postmeta.meta_key = 'featured_c' AND $wpdb->postmeta.meta_value = 'c') DESC";
}
elseif (isset($_REQUEST['directory_sortby']) && $_REQUEST['directory_sortby'] == 'date_asc' )
{
$orderby = "$wpdb->posts.post_date ASC,(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id=$wpdb->posts.ID and $wpdb->postmeta.meta_key = 'featured_c' AND $wpdb->postmeta.meta_value = 'c') DESC";
}
elseif (isset($_REQUEST['directory_sortby']) && $_REQUEST['directory_sortby'] == 'date_desc' )
{
$orderby = "$wpdb->posts.post_date DESC,(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id=$wpdb->posts.ID and $wpdb->postmeta.meta_key = 'featured_c' AND $wpdb->postmeta.meta_value = 'c') DESC";
}
elseif (isset($_REQUEST['directory_sortby']) && $_REQUEST['directory_sortby'] == 'stdate_low_high' )
{
$orderby = "(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id = $wpdb->posts.ID and $wpdb->postmeta.meta_key like \"st_date\") ASC";
}
elseif (isset($_REQUEST['directory_sortby']) && $_REQUEST['directory_sortby'] == 'stdate_high_low' )
{
$orderby = "(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id = $wpdb->posts.ID and $wpdb->postmeta.meta_key like \"st_date\") DESC";
}elseif(isset($_REQUEST['directory_sortby']) && $_REQUEST['directory_sortby'] == 'random' )
{
$orderby = "(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id=$wpdb->posts.ID and $wpdb->postmeta.meta_key = 'featured_h') ASC,rand()";
}elseif(isset($_REQUEST['directory_sortby']) && $_REQUEST['directory_sortby'] == 'reviews' )
{
$orderby = 'DESC';
$orderby = " comment_count $orderby,(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id=$wpdb->posts.ID and $wpdb->postmeta.meta_key = 'featured_c' AND $wpdb->postmeta.meta_value = 'c') DESC";
}elseif(isset($_REQUEST['directory_sortby']) && $_REQUEST['directory_sortby'] == 'rating' )
{
$orderby = " (select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id = $wpdb->posts.ID and $wpdb->postmeta.meta_key like \"average_rating\") DESC,(select distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where $wpdb->postmeta.post_id=$wpdb->posts.ID and $wpdb->postmeta.meta_key = 'featured_c' AND $wpdb->postmeta.meta_value = 'c') DESC";
}else{
$orderby = " (SELECT distinct $wpdb->postmeta.meta_value from $wpdb->postmeta where ($wpdb->posts.ID = $wpdb->postmeta.post_id) AND $wpdb->postmeta.meta_key = 'featured_c' AND $wpdb->postmeta.meta_value = 'c') DESC, $wpdb->posts.post_date DESC";
}
return $orderby;
}
/*

Ramon.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Código para generar un orden aleatorio

Publicado por kip (877 intervenciones) el 11/07/2016 14:47:27
Hola, y que funcion usas para obtener los resultados de aquella variable $orderby? Podrias colocarla

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Código para generar un orden aleatorio

Publicado por clau (3 intervenciones) el 11/07/2016 17:43:32
Hola Kip, gracias por el interés.

Perdona, pero pensaba que la funcion era "directory_category_filter_orderby". Creía que con ese código era suficiente para decidir qué se mostraba por defecto en la página... Ya te digo que no tengo idea de PHP.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Código para generar un orden aleatorio

Publicado por kip (877 intervenciones) el 11/07/2016 17:57:25
Bueno, de todas formas te dejo estas lineas, busca el script donde se muestran los post y agrega esto a donde sea correspondiente:

1
2
3
4
5
query_posts(array(
	'showposts' => 6,// muestra los post que desees 
	'orderby' => 'rand',
));
if (have_posts()) : while (have_posts()) : the_post();

Comentanos como te fue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Código para generar un orden aleatorio

Publicado por clau (3 intervenciones) el 11/07/2016 18:18:38
Lo intentaré.

Si lo consigo por mi mismo, invito a cañas a todo el foro ;)

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar