Les « Custom Post » de WordPress

Comment transformer votre WordPress en un puissant CMS ? Voici le but de ce post ! Nous allons utiliser une fonctionnalité appelée Custom Post. Qu’est qu’un Custom Post ?  Il s’agit de créer un nouveau type de post avec des champs personnalisés pour répondre à vos besoins. Par exemple on va pouvoir ajouter une rubrique Portfolio, Clients, Projets, Recettes …

Comment mettre en place les Custom Post

La plupart de ce que l’on va faire se fait dans le fichier function.php (à la racine de votre thème). Pour notre exemple nous allons créer un nouveau type de posts Projets avec 2 champs personnalisés : Ville et Pays.

Déclaration du Custom Post

Pour commencer on va dire à WordPress que nous souhaitons créer un nouveau type de post. Voici le codex de wordpress qui explique les différents arguments que l’on peut passer à cette fonction : register_post_type

register_post_type('projet', array(
  'label' => __('Projets'),
  'singular_label' => __('Projet'),
  'public' => true,
  'show_ui' => true,
  'capability_type' => 'post',
  'hierarchical' => false,
  'supports' => array('title', 'author', 'thumbnail')
));

Création des champs personnalisés

Lorsqu’on crée un type de post, on peut aussi y ajouter différents champs personnalisés pour ce type de post. Dans notre cas, on veut ajouter Ville et Pays qui définiront un projetJe vous laisse regarder les paramètres de la fonction add_meta_box.

La description, le titre et le thumbnail sont ajoutés lors de la déclaration de notre nouveau type de post (paramètre supports)

function admin_init(){
  add_meta_box("city_projet", "Ville du projet", "city_projet",   "projet", "normal", "high");
  add_meta_box("country_projet", "Pays du projet", "country_projet", "projet", "normal", "high");
}

Définition des champs personnalisés

Ici on va déterminer le type d’affichage que l’on veut pour nos champs personnalisés dans le panneau d’admin. On peut alors définir le type de champ dans le formulaire input text, textarea, select …

function city_projet(){
 global $post;
 $custom = get_post_custom($post->ID);
 $city_projet = $custom["city_projet"][0];
?>
 <input size="70" type="text" value="<?php echo $city_projet;?>" name="city_projet"/>
<?php
}

function country_projet(){
 global $post;
 $custom = get_post_custom($post->ID);
 $country_projet = $custom["country_projet"][0];
?>
 <input size="70" type="text" value="<?php echo $country_projet;?>" name="country_projet"/>
<?php
}

Fonction de sauvegarde des champs personnalisés

Il faut ensuite créer les fonctions qui vont permettre la sauvegarde en base de données des champs personnalisés. En gros quelles actions veut-on entreprendre lorsque l’on clique sur Save Draft / Publier ou aussi lors de la sauvegarde automatique.

function save_custom_projet(){
 global $post;
 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
 	 return $postID;
 }
 update_post_meta($post->ID, "url_projet", $_POST["url_projet"]); //enregistrement dans la base de données
 update_post_meta($post->ID, "country_projet", $_POST["country_projet"]);
 update_post_meta($post->ID, "city_projet", $_POST["city_projet"]);
}

On met le tout en action

La dernière étape consiste à appeler les fonctions que l’on vient de créer plus haut. Sans cela, rien ne se passera et votre nouveau « Custom Post » ne fonctionnera pas correctement.

add_action("admin_init", "admin_init");
add_action('save_post', 'save_custom_projet');

Voici le résultat en image

Conclusion

Cette nouvelle fonctionnalité de WordPress (ajouté à la version 3) permet concrètement de tourner WordPress en un CMS puissant et malléable.

Si vous avez des questions, n’hésitez pas, j’essayerais d’y répondre au maximum de mes connaissances.

Pas de commentaire

Laisser un commentaire

Please be polite. We appreciate that.
Your email address will not be published and required fields are marked