web-dev-qa-db-fra.com

Comment créer une page d'archive affichant des publications dans une plage de dates

J'essaie de créer quelques modèles de page pour différentes pages qui devraient servir d'archive pour afficher les publications (un type de publication personnalisé) dans une plage de dates donnée.

Le site Web concerné est http://memstories.com et le CPT est "Events". J'ai déjà trouvé quelques mentions d'un fil de discussion sur WP Support ( https://wordpress.org/support/topic/show-the-posts-published-before-a-specific-date?replies= 2 # post-1066144 ), mais je ne parviens pas à le faire fonctionner:

<?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);
?>

Étant donné que les publications d'événements sur ce site Web sont toutes des événements historiques, j'utilise la date de publication comme date réelle pour laquelle un événement historique s'est produit et je remonte aussi loin que l'année 1900. Dans la requête ci-dessus, j'essaie d'accomplir. une liste de messages qui entrent dans la fourchette de dates de la première moitié du 20e siècle (1900-1919), mais c'est un échec de toute façon que je l'essaie.

Il n'y a vraiment nulle part ailleurs où je peux trouver plus d'informations. En fait, toutes les questions similaires sur stackexchange reçoivent une réponse avec un lien vers le même fil (5 ans!) Sur le support Wordpress.

Quelqu'un a une idée comment résoudre ce problème?

2
dbj

L'enregistrement de la date dans post meta est une approche légèrement plus saine, la colonne post_date n'a pas été conçue pour votre cas d'utilisation. Vous pouvez obtenir des résultats étranges avec des dates antérieures à l’époque Unix (1er janvier 1970). Ensuite, il suffit d'un meta_query simple pour charger les publications entre les dates, aucun filtre n'est nécessaire.

$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 );
3
Milo

Eh bien, WP est peut-être en train de supprimer votre filtre.

Selon le WP Codex sur posts_where @: http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where

Certaines fonctions récupérant des publications ne font pas de filtres. Par conséquent, les fonctions de filtre posts_where que vous attachez ne modifieront pas la requête. Pour résoudre ce problème, définissez suppress_filters sur false dans le tableau d'arguments transmis à la fonction.

C'est le code qu'ils référencent:

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

Utilisez-vous cela lors de votre appel à get_posts ()?

1
Sean Grant