Gestion d'événements avec événements futurs et passés

Gestion d'événement dans WordPressVous souhaitez annoncer sur votre site vos prochains concerts, expos, conférences, salons… et aussi permettre de consulter l'archivage de ceux passés… tout ça bien sûr sans avoir à les basculer manuellement de futur à passé, lorsque la date est passée ?

La théorie

evenement-futur-wordpressAlors pour faire simple, je vous propose de mettre la date réelle de l'événement comme date de publication de l'article, ainsi, WordPress sera capable de savoir tout seul si l'événement est passé ou non.

Et de ranger les événements dans une catégorie Événements, que vous pouvez nommer autrement bien sûr. Disons simplement pour la suite que cette catégorie a l'identifiant 14.

La pratique

Vous pouvez choisir d'afficher vos Événements directement via la catégorie ou via une page Événements à laquelle vous attribuez un template de page spécifique.

Sachant que pour afficher les Événements passés, rien de particulier n'est à mettre en place puisque WordPress liste par défaut les articles dont la date est déjà passée, de manière ante-chronologique, ce qui nous convient très bien. Voici ce que ça donne avec pagination :

<?php if (have_posts()) : ?>
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;  
     query_posts("showposts=10&paged=$paged&cat=14");
     <?php get_template_part( 'loop', 'index' ); ?>
<?php endif; ?>

Par contre pour les événements à venir, il nous faut lister les événements qui sont planifiés (à date de publication future), et dans l'ordre chronologique pour que le premier soit le prochain, et que suivent ceux qui sont plus loin dans le temps :

<?php if (have_posts()) : ?>
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;  
     query_posts("showposts=10&paged=$paged&cat=14&post_status=future&orderby=date&order=ASC");
     <?php get_template_part( 'loop', 'index' ); ?>
<?php endif; ?>

A noter qu'avec le post_status, vous pouvez aussi balader une variable pour vous permettre de pousser plus loin vos fonctionnalités, en proposant par exemple un bouton "Réserver une place" uniquement si l'événement est futur, ou de n'ouvrir les commentaires que si l’événement est passé.

UPDATE du 3 juin 2014

Ah, j'ai effectivement oublié ceci ; pour que WordPress veuille bien afficher le détail d'un post à date future (single.php), il est nécessaire de l'autoriser à le faire, en insérant ceci dans votre fichier functions.php :

function show_future_posts($posts)
{
   global $wp_query, $wpdb;
   if(is_single() && $wp_query->post_count == 0)
   {
      $posts = $wpdb->get_results($wp_query->request);
   }
   return $posts;
}
add_filter('the_posts', 'show_future_posts');

Sans quoi, l'accès au détail d'un article vous enverra sur la 404, puisque le post est futur, donc non public.

Poursuivre votre lecture

2 commentaires : Gestion d'événements avec événements futurs et passés

  1. LEHOUX SOPHIE

    3 juin 2014

    Bonjour,
    Pouvez-vous me dire dans quel fichier on doit intégrer votre code...?
    Parce que je cherche partout comment transformer mes articles en événements et votre solution me parait la bonne... Pouvez-vous me dire ça rapidement ?
    Merci d'avance
    SL

  2. Laurent

    3 juin 2014

    Bonjour Sophie,
    dans mon cas, comme la gestion d'événement ne concernait pas tous les articles mais seulement une catégorie, j'ai créé un modèle de page spécifique à celle-ci.
    Ensuite, ce code peut facilement être adapté à n'importe quelle Query, tout dépend de votre thème.

Laisser un commentaire

Si vous insérez du code, merci d'utiliser les balises [php] en début et [/php] en fin, ou [html] et [/html]...