Wordpress is veel verbeterd. Vroeg je voorheen iemand om bijvoorbeeld een nieuwe webcast te publiceren, dan ging dat ongeveer als volgt: "Wil je een nieuwe webcast publiceren? Ja, dat gaat via de posts. Klik gewoon op 'Add post', en dan vul je de titel in. Nee niet via de gewone media een audio-file toevoegen, maar rechts in beeld zie je een blokje met een speciaal upload-veld. Ja, klik daarop en selecteer het bestand op je harde schijf met de webcast. Klik op upload. Nee je ziet het nu niet, maar het bestand zit er echt aan! Vink nu onder 'Categories' het blokje voor 'Webcast' aan. Ja, klik nu op Publish! Alles gelukt? Even kijken..."
Met de komst van Custom Post Types is dit probleem geheel uitgeroeid. Alle 'gedragingen' en 'kenmerken' van een post kunnen van tevoren worden gedefinieerd. Dit maakt het zowel makkelijker voor content editors (zij kunnen nagenoeg zonder instructies aan de slag, alles spreekt voor zich) als voor de webmaster (alles komt direct op de goede plek op de website terecht en uitvoerige uitleg zoals hierboven omschreven is niet meer nodig).
Zo heb ik voor een klant een website gemaakt, waarop een pagina moest komen waarop - gescheiden van de reguliere nieuwsberichten - vragen moesten worden opgesomd. Deze vragen wilde men weergeven op een afzonderlijke pagina. Daarom het ik het custom post type 'vraag' aangemaakt. Eigenlijk verschilt dit post type niets van een reguliere post, behalve dat het direct op de goede pagina terecht komt!
Hieronder vind je de code zoals ik die heb ingepast in
functions.php:
// Vragen
add_action( 'init', 'create_post_type' ); // Hier definieren we de kenmerken van dit post type in Wordpress
function create_post_type() {
$labels = array(
'name' => _x('Vragen', 'post type general name'),
'singular_name' => _x('Vraag', 'post type singular name'),
'add_new' => _x('Voeg toe', 'vraag'),
'add_new_item' => __('Voeg vraag toe'),
'edit_item' => __('Bewerk vraag'),
'new_item' => __('Nieuwe vraag'),
'view_item' => __('Toon vraag'),
'search_items' => __('Zoek vraag'),
'not_found' => __('Geen vragen gevonden'),
'not_found_in_trash' => __('Geen vragen gevonden in prullenbak'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt','comments') // Dit zijn parameters voor gedraging van het custom post type
);
register_post_type( 'vraag',$args); // Hoppa! Daar is het post type 'vraag'!!
}
//Filter voor goed gebruik van de woorden "vraag" of "vragen" in Wordpress (bijvoorbeeld bij updates).
add_filter('post_updated_messages', 'vraag_updated_messages');
function vraag_updated_messages( $messages ) {
$messages['vraag'] = array(
0 => '', // Niet in gebruik, start pas bij 1!! ;-)
1 => sprintf( __('Vraag bijgewerkt. <a href="/%s">Toon vraag</a>.'), esc_url( get_permalink($post_ID) ) ),
2 => __('Eigen veld bijgewerkt.'),
3 => __('Eigen veld verwijderd.'),
4 => __('Vraag bijgewerkt.'),
/* translators: %s: datum en tijdstip van de revisie */
5 => isset($_GET['revision']) ? sprintf( __('Vraag hersteld naar revisie van %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
6 => sprintf( __('Vraag gepubliceerd. <a href="/%s">Toon vraag</a>.'), esc_url( get_permalink($post_ID) ) ),
7 => __('Vraag opgeslagen.'),
8 => sprintf( __('Vraag verzonden. <a target="_blank" href="/%s">Voorvertoning van vraag</a>.'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
9 => sprintf( __('Vraag zal worden gepubliceerd op: <strong>%1$s</strong>. <a target="_blank" href="/%2$s">Voorvertoning vraag</a>'),
// translators: Publiceer datum, zie http://php.net/date
date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
10 => sprintf( __('Conceptvraag bijgewerkt. <a target="_blank" href="/%s">Voorvertoning van vraag</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
);
return $messages;
}
De loop die daadwerkelijk dit post-type op de pagina ophaalt ik heb hiertoe een nieuwe page template, genaamd vraag.php, aangemaakt in de theme folder), ziet er als volgt uit (:
<?php query_posts('posts_per_page=5&post_type=vraag'); ?><!-- hier wordt gefilterd op vragen -->
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<h3 class="entry-title"><?php the_title(); ?></h2>
<div class="entry-content"><?php the_content() ?></div>
<?php endwhile; else: ?>
<p>Sorry, er zijn op dit moment nog geen vragen.</p>
<?php endif; ?>
<?php wp_reset_query(); ?>
Heb je nog vragen en/of toevoegingen met betrekking tot deze post over Custom Post Types? Mail vooral naar info@jdezine.nl of reageer hieronder. Alvast hartelijk bedankt!