Saltar al contenido

Wordpress – Cómo obtener publicaciones aleatorias y ordenarlas por fecha

Solución:

Desafortunadamente, eso nunca funcionará. ‘rand’ es un orden aleatorio, por lo que siempre terminas con un orden aleatorio, sin importar lo que pongas para la fecha.

Para hacer algo como lo que está describiendo, debe usar 'orderby'=>'rand'. Luego, puede ordenar el resultado por fecha.

$query = new WP_Query(
    [
        'post__in' => $post_id_array,
        'posts_per_page' => $number,
        'orderby' => 'rand'
    ]
);

// Sort the resulting posts array by date
usort( $query->posts, function( $a, $b ) {
    $t1 = strtotime( $a->post_date );
    $t2 = strtotime( $b->post_date );
    return $t1 - $t2;
});

// $query->posts is now sorted and in order by date.

Primero ordena tus publicaciones al azar. Luego, en la consulta externa, ordena las publicaciones de la subconsulta por fecha.

Lo haría con la ayuda de filtros posts_request y posts_orderby. La consulta se modificará solo después de configurar el 'ord_rand_then_date' => true parámetro.

add_filter('posts_request', 'se354396_request', 50, 2);
add_filter('posts_orderby', 'se354396_orderby', 50, 2);

function se354396_request( $sql_request, $wp_query )
{
    if ( ! $wp_query->get('ord_rand_then_date', false) )
        return $sql_request;

    $sql_request="SELECT sub.* FROM (" . $sql_request . ') sub ORDER BY post_date DESC';
    return $sql_request;
}
function se354396_orderby( $orderby, $wp_query ) 
{ 
    $custom_order = $wp_query->get('ord_rand_then_date', false);
    if ( $custom_order !== true && $custom_order != '1' )
        return $orderby;

    return 'RAND()'; 
}

Ejemplo:

$my_posts = get_posts( [
    'ord_rand_then_date' => true,
    'suppress_filters'   => false,
    // other parameters
] );
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *