get_posts no mayores de X días – WordPress

2 minutos de lectura

avatar de usuario
henrik petterson

En mi sitio de WordPress, uso esto get_posts código:

get_posts(
        array (
            'numberposts' => 5,
            'orderby'=>'comment_count',
            'order'=>'DESC',
            'post_type'   => array ( 'post' )
        )

¿Cómo lo filtro para que las publicaciones no tengan más de 10 días? Por lo tanto, solo debe enumerar las publicaciones de los últimos 10 días.

avatar de usuario
código

A partir de 3.7 puedes usar date_query https://developer.wordpress.org/reference/classes/wp_query/#date-parameters

Entonces se vería como:

$args = array(
    'posts_per_page' => 5,
    'post_type' => 'post',
    'orderby' => 'comment_count',
    'order' => 'DESC',
    'date_query' => array(
        'after' => date('Y-m-d', strtotime('-10 days')) 
    )
); 
$posts = get_posts($args);

El ejemplo del doc. debería funcionar bien. get_posts() usos WP_Query() detrás de la escena para hacer la solicitud real. Para su caso, el ejemplo modificado debería verse así:

// Create a new filtering function that will add our where clause to the query
function filter_where( $where="" ) {
    // posts in the last 30 days
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-10 days')) . "'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = get_posts(array (
            'numberposts' => 5,
            'orderby'=>'comment_count',
            'order'=>'DESC',
            'post_type'   => array ( 'post' )
         ));
remove_filter( 'posts_where', 'filter_where' );

  • No puedo entender cómo integrar esta solución a mi código actual. He actualizado mi pregunta con mi código completo, ¿pueden echar un vistazo y demostrar cómo funcionaría su solución con mi código? Si funciona, ciertamente aceptaré esta respuesta como correcta.

    –Henrik Petterson

    7 junio 2013 a las 23:57

  • @HenrikPetterson: mi solución sería prácticamente la misma con su código completo. Lo que debe hacer es 1: definir un filtro personalizado que haga lo que desea (la función “filter_where ()” en mi respuesta, que se limita a los últimos diez días), 2: agregar el filtro a todas las consultas de ahora en adelante usando add_filter, 3 – ejecute la consulta, get_post() llamará a wp_query() que aplicará su filtro, 4 – elimine el filtro con remove_filter(), para que no se aplique a otras consultas que seguirán o podrían seguir. El único cambio sería cambiar el nombre de $query a $posts.

    – Lepidosteo

    8 de junio de 2013 a las 0:04


  • Sabes que entendí la solución justo cuando publiqué ese comentario. Gran respuesta. Aceptado.

    –Henrik Petterson

    8 de junio de 2013 a las 0:05

¿Ha sido útil esta solución?