Tutoriel Vidéo WordPress Champs personnalisés

Télécharger la vidéo Télécharger les sources

Wordpress est un CMS qui permet beaucoup de souplesse en terme de gestion de contenu avec notamment la possibilité de créer des champs supplémentaires dynamiquement.

Pour ajouter des champs personnalisés on va avoir besoin d'utiliser plusieurs éléments :

add_meta_box

add_meta_box permet de créer la partie interface de notre champ personnalisé. Cette fonction prendra en paramètre une fonction qui s'occupera de la partie rendu. Afin de ne pas lancer ce code pour rien on pourra l'utiliser dans le hook admin_init.

Le formulaire est relativement simple mais pourra contenir un "nonce" qui permettra de s'assurer de l'origine des données lors du traitement. Ce nonce est créé à partir d'une clef qui devra aussi être utilisée lors de la vérification :

echo '<input type="hidden" name="grafikart_nonce" value="' . wp_create_nonce('grafikart') . '">';

En revanche, cette fonction ne s'occupe pas de la sauvegarde des informations entrées. Il faudra donc passer par une autre méthode.

save_post

Pour la partie traitement il va falloir écouter la sauvegarde d'un article et rajouter notre logique au niveau du callback

add_action('save_post', function ($post_id) {
    // On ne fait rien en cas de save Ajax
    if (
        (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) ||
        (defined('DOING_AJAX') && DOING_AJAX)
    ) {
        return false;
    }

    // On vérifie les permissions
    if (!current_user_can('edit_post', $post_id)) {
        return false;
    }

    // On vérifie le nonce
    if (!wp_verify_nonce($_POST['grafikart_nonce'], 'grafikart')) {
        return false;
    }

    // On sauvegarde notre meta à l'aide des méthodes XX_post_meta()
    $meta = "surface"
    if (isset($_POST[$meta])) {
        $value = $_POST[$meta];
        if (get_post_meta($post_id, $meta)) {
            update_post_meta($post_id, $meta, $value);
        } else {
            if ($value === '') {
                delete_post_meta($post_id, $meta);
            } else {
                add_post_meta($post_id, $meta, $value);
            }
        }
    }
});