Meta Box et Champs personnalisés en Accueil

Voici comment ajouter différentes META BOX, avec différents champs personnalisés, sur votre page d’accueil.

Le but est de cibler votre page d’accueil – page_on_front – pour afficher la ou les META BOX souhaitées. Pour cela il faut vous assurer que le réglage de page d’accueil du site, est bien sur « Page statique », et que vous avez sélectionnée une page dédiée à cet effet.

Création de la META BOX

Nous allons devoir ajouter du code, plus précisément une fonction et son appel ADD_ACTION, dans le fichier function.php de notre thème. Dans notre cas, j’ai choisi de créer une META BOX pour me permettre de saisir des CHAMPS PERSONNALISÉS, et pouvoir mettre en place une section dans le template front-page.php qui les affiche.

Voici donc notre première fonction pour déclarer et ajouter une META BOX à l’édition de ma page d’accueil.

/* enregiqstrement de toutes les meta box pour l'accueil */
 function mary_add_meta_box() {
     global $post;
     if ( $post->ID === (int) get_option( 'page_on_front' ) ):
     add_meta_box( 'add_home_mary_metabox_service', __( 'Services', 'mary' ), 'display_home_mary_metabox_services', 'page', 'normal', 'high',
             array(
                 '__back_compat_meta_box' => false,
             ) );
     endif;
 } //fin de la déclaration de la fonction

Dans le détail, mary_add_meta_box() contient…

Focus sur le dernier argument

Depuis l’arrivé de l’éditeur GUTENBERG, l’ajout et la présence des META BOX n’était pas possible. Il fallait ré-activer l’éditeur classique pour cela.

A présent nous pouvons rendre rétro-compatible nos anciennes META BOX, de plugins ou de thèmes, avec l’éditeur de bloc. Notez qui est également possible de créer et personnaliser ses propres blocs GUTENBERG. Cela fera surement l’objet d’une prochaine publication.

Donc grâce au tableau suivant, passer en dernier argument de la fonction add_meta_box(), vous permettez à votre META BOX de cohabiter avec GUTENBERG.

 array( '__back_compat_meta_box' => false, )

Accrocher la fonction !

Il ne reste plus qu’à appeler notre fonction mary_add_mete_box sur le HOOK WordPress ‘add_meta_boxes’ :

add_action( 'add_meta_boxes', 'mary_add_meta_box' );

Rendez vous à présent sur l’édition de votre page d’accueil en admin et vous devriez voir votre META BOX.

Mettre en place les premiers champs

Dans la partie précédente nous avons déclarer, en argument de add_meta_box(), la fonction ‘display_home_mary_metabox_services’ qui se chargera de présenter en mettre en forme les champs à utiliser.

Bien entendu vous pouvez choisir des noms de fonction plus courts…

moi même.

Voici le code que je vous propose pour faire afficher trois champs de formulaire personnalisés et de sauvegarder leur valeur :

Fonction d'affichage des champs et de leur sauvegarde.
Cliquez pour agrandir

Première fonction en détail : affichage des champs

Si vous souhaitez utiliser BOOTSTRAP en ADMIN de WordPress pour votre mise en forme de META BOX, par exsemple, il vous faudra ajouter le code ci-dessous dans functions.php :

/* ajout grid bootstrap en ADMIN */
 function mary_admin_style() {
     wp_enqueue_style( 'mary-style-bs-admin', get_template_directory_uri() . '/assets/css/bootstrap.min.css', null, $theme_version, 'screen' );
 }
add_action( 'admin_enqueue_scripts', 'mary_admin_style' );

Seconde fonction en détail : sauvegarde

Cette fonction sera appeler via le HOOK WordPress ‘save_post’ et testera la présence, ou non, des variables de votre formulaire de la fonction précédente.

add_action( 'save_post', 'mary_home_save_postdata' );

La fonction mary_home_save_postdata() utilisera ensuite la fonction update_post_meta() pour enregistrer les valeurs saisies.

 /* fonction pour la sauvegarde des données saisies via meta box */
 function mary_home_save_postdata( $post_id ) {
     if ( array_key_exists( 'titre_section_services', $_POST ) ) {
         update_post_meta( $post_id, '_titre_section_services', $_POST['titre_section_services'] );
     }
     if ( array_key_exists( 'active_section_services', $_POST ) ) {
         update_post_meta( $post_id, '_active_section_services', $_POST['active_section_services'] );
     }
     if ( array_key_exists( 'color_section_services', $_POST ) ) {
         update_post_meta( $post_id, '_color_section_services', $_POST['color_section_services'] );
     }
 } 

Dans notre cas, $post_id est transmis en argument afin de l’associé au bon POST lors de l’update_post_meta(), en premier argument. En second argument vous indiquerez la meta_key.

Il s’agit de la clé ou de l’intitulé de la valeur du champs que vous souhaitez enregistrer. C’est grâce à cette meta_key que vous pouvez récupérer les valeur dans la fonction précédente avec le get_post_meta(). Attention donc à la correspondance entre ces dénominations.

Dernier argument, et bien la variable qui contient la valeur saisie dans vos champs de formulaire, au format $_POST[‘nom_du_champs’].

Regardez ! Elle fonctionne !

Affichage de la meta box uniquement en page d'accueil