Simpel og smart Event Kalender i Wordpress

Hvis du som mig elsker at kunne styre din HTML 100%, er det en fryd, når man ikke er tvunget til bare at tilføje et nyt plugin, hvergang der er brug for ny funktionalitet på Wordpress hjemmesiden.
Det er også vigtigt, at begrænse mængden af plugin, for at bevare sikkerheden og for at optimere load hastighed på siden.

Ny custom post type

Det første der skal ske er at oprette en ny custom post type. Typisk vil du gøre det i et lille simpelt plugin som nedestående
http://codex.wordpress.org/Post_Types#Custom_Post_Types

<?php
/*
Plugin Name: Indholdstype til Event Kalender
Plugin URI: <a href="http://www.yyy.dk/<br />
Description:">http://www.yyy.dk/
Description:</a> Opretter nye indholdstyper til Event Kalender
Version: 1.0
Author: Dit Navn
Author URI: <a href="http://www.xxx.dk/<br />
License:">http://www.xxx.dk/
License:</a> GPLv2
*/

/* Nye post typer */
function codex_custom_init() {
   
$args = array(
     
'public' => true,
     
'label'  => 'Event',
     
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' )
    );
   
register_post_type( 'event', $args );
}
?>

Advance Custom Fields

Nu skal vi bruge et nyt plugin. Ja, jeg ved godt at jeg lige har sagt, at det gælder om at begrænse mængden af dem. MEN det her er super fedt, og chancen for at du har installeret det i forvej er stor.
https://wordpress.org/plugins/advanced-custom-fields/

Med Advance Custom Fields opretter du et nyt DATO felt.
Selve feltet kalder du - dato
Vælg format - Date Picker
Kryds af i - Required

Ny theme fil

Opret en ny theme fil kaldet page-kalender.php i din theme mappe.
tag kopi af page.php og lave den ud fra den!
Selve content delen udskifter du med et Loop

Læg mærke til 'meta_key' => 'dato' her er 'dato', navnet på det felt du oprettede med Advance Custom Fields!

<?php
    $time
= current_time('ymd');
   
$loop = new WP_Query( array(
   
'post_type' => 'event',
   
'orderby' => 'meta_value_num',
   
'order' => 'ASC',
   
'meta_key' => 'dato',
   
'meta_type' => 'DATE',
   
'meta_value' => $time,
   
'meta_compare' => '>=',
    )
);
?>

<ul class="event__kalender">
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<li>
<?php if ( has_post_thumbnail() ) : ?>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_post_thumbnail( 'eventimg' ); ?></a>
<?php endif; ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div class="blog__info">
<p class="evet__kalender__dato"><?php  the_field('dato'); ?></p>
</div>
<?php the_excerpt(); ?>
</li>
<?php endwhile; ?>
</ul>

Her sorteres altså efter dato, så de events der begynder lige om lidt vises øverst i listen.
Hvis en event er blevet afholdt, vises den ikke mere.

Opret container siden til Event kalender

Med en almindelig sidetype (page) opretter du en container for selve Evnet Kalender.
Det er vigtig at URL'en er /kalender ... eller det samme som den page.php du lige har oprettet.

single-event.php skal oprettes

Du vil sikkert som minimum tilføje den ny dato på single.php i dit theme.
Derfor skal du oprette en single-event.php, hvor du laver de ændringer, der er nødvendig for selv event siden.

<?php
$date
= get_field('dato');
// $date = 19881123 (23/11/1988)

// extract Y,M,D
$y = substr($date, 0, 4);
$m = substr($date, 4, 2);
$d = substr($date, 6, 2);

// create UNIX
$time = strtotime("{$d}-{$m}-{$y}");

// format date (November 11th 1988)
echo date('d. F Y', $time);
?>