Cómo crear una página de archivo que muestre publicaciones en un rango de fechas

2

Estoy intentando crear un par de plantillas de página para diferentes páginas que deberían actuar como un archivo para mostrar publicaciones (en realidad, un tipo de publicación personalizada) en un determinado rango de fechas.

El sitio web al que se refiere es enlace y el CPT es "Eventos". Ya encontré algunas menciones de un hilo en el Soporte de WP ( enlace ), pero no puedo hacer que funcione:

<?php
function filter_where($where = '') {
$where .= " AND post_date >= '1900-01-01' AND post_date <= '1949-12-31'";
return $where;
}
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>

Debido a que las publicaciones del Evento en este sitio web son eventos históricos, estoy usando la Fecha de publicación como la fecha real en que ocurrió el evento histórico y me remonté al año 1900. En la consulta anterior, Intento lograr una lista de publicaciones que se ajustan al intervalo de fechas de la primera mitad del siglo XX (1900 - 1949), pero es un fracaso, de todos modos, lo intento.

Realmente no hay otro lugar donde pueda encontrar más información, de hecho, todas las preguntas similares en stackexchange se responden con un enlace al mismo hilo (¡de 5 años!) en Wordpress Support.

¿Alguien tiene una idea de cómo resolver esto?

    
pregunta dbj 17.02.2015 - 17:49

2 respuestas

3

Guardar la fecha en post meta es un enfoque un poco más sano, la columna post_date no fue diseñada teniendo en cuenta su caso de uso. Puede obtener resultados extraños con fechas anteriores a la época de Unix (1 de enero de 1970). Entonces es solo un simple meta_query para cargar publicaciones entre fechas, sin filtro.

$start = '1900-01-01';
$end = '1949-12-31';
$args = array(
    'post_type' => 'events',
    'posts_per_page' => -1,
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_key' => '_event_date',
    'meta_query' => array(
        array(
            'key' => '_event_date',
            'value' => array( $start, $end ),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
);
$events_query = new WP_query( $args );
    
respondido por el Milo 17.02.2015 - 18:27
1

Bueno, WP puede estar suprimiendo tu filtro.

Por el Códice WP en posts_where @: enlace

  

Ciertas funciones que recuperan publicaciones no ejecutan filtros, por lo que las funciones de filtro posts_where que adjuntas no modificarán la consulta. Para superar esto, establezca el método delete_filters en false en la matriz de argumentos que se pasó a la función.

Este es el código al que hacen referencia:

//get posts AND make sure filters are NOT suppressed
$posts = get_posts( array( 'suppress_filters' => FALSE ) );

¿Está utilizando esto en su llamada get_posts ()?

    
respondido por el Sean Grant 17.02.2015 - 18:20