Ajouter une boite (meta box) dans le back-office de wordpress
Pour ajouter une boite dans le back-office de wordpress (typiquement, pour administrer un champ personnalisé de façon un peu plus sexy que l’interface de base), on peut utiliser la fonctionnalité de WordPress add_meta_box.
L’ajout d’une méta box se fait en 3 étapes :
1 – Déclaration de la boite
2 – Création de l’interface
3 – Actions à affectuer lors de la sauvegarde du post.
A noter que cela fonctionne aussi bien pour des types natifs (posts et pages) que pour des customs posts types.
Déclaration de la boite
function pages_admin_menu() {
add_meta_box('my_box','Mon libellé', 'mon_libelle_meta_box', 'page', 'normal', 'core');
}
add_action( 'admin_menu', 'pages_admin_menu' );
Lors de la création du menu de l’administration, on appelle la fonction pages_admin_menu, qui ajoute une méta box via la fonction add_meta_box. Cette fonction prend comme arguments :
- L’id de la boite
- Le libellé qui apparait sur l’interface
- La fonction qui génère le html de l’interface
- Le type de post (post, page ou nom d’un custom post)
- L’endroit de la page où l’interface doit apparaitre (‘normal’, ‘advanced’, ou ‘side’)
- La priorité d’affichage de la boite (‘high’, ‘core’, ‘default’ ou ‘low’)
Création de l’interface
C’est notre fonction précédemment définie, mon_libelle_meta_box, qui s’en charge. Ici, nous mettons un simple champ texte, mais on peut évidemment personnaliser cette partie en mettant un select, une checkbox…
function mon_libelle_meta_box(){
global $post;
?>
;
<?php
}
Actions à affectuer lors de la sauvegarde du post
Nous devons maintenant préciser que faire de notre champ lorsqu’on sauvegarde le post :
function mybox_save_postdata( $post_id ) {
// ne rien faire en auto-save
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// vérification des droits permissions
if ( 'page' == $_POST['post_type'] )
{
if ( !current_user_can( 'edit_page', $post_id ) )
return;
}
else
{
if ( !current_user_can( 'edit_post', $post_id ) )
return;
}
//ajouter éventuellement des vérifications pour les custom post types
if(isset($_POST['my_box']))
update_post_meta($post_id, 'my_box', $_POST['my_box']);
//paramètres : id du post, nom du champ perso, valeur (en post)
}
add_action( 'save_post, 'mybox_save_postdata' );





Par pitav
Merci pour ce tuto qui correspond exactement à ce que je cherchais
Par Stephane
« if(isset($_POST['nb_lectures']))
»
Cette ligne est incohérente avec le reste du code précédent. D’où provient ‘nb_lectures’ ?
Par Virginie
@ Stephane > C’est corrigé.
Par payer en ligne
Ou trouver une liste des meta box possibles, c’est à dire les champs texte, les upload, images, les select…?
Par abercrombie and fitch paris
This was very informative. I have been reading your blog a lot over the past few days and it has earned a place in my bookmarks.
Par Communique presse
Merci pour ce tuto, c’est tout juste ce qu’il me faut !
Par opl
Petite typo dans la dernière ligne du dernier script : il manque une apostrophe après le nom du hook.
Et bug d’affichage dans ce formulaire de commentaire : top:-18px fait commencer la zone de saisie 1 ligne avant le rectangle gris à bords arrondis
(Fx11 avec Windows)