Dans ce chapitre nous allons voir comment gérer les métadonnées associées à un article et comment créer une interface pour les administrer. Les métadonnées permettent de sauvegarder des informations supplémentaires.

// Pour ajouter une meta
update_post_meta($postId, 'ma_meta', 'ma valeur');

// Pour mettre à jour ou ajouter une meta
update_post_meta($postId, 'ma_meta', 'ma valeur');

// Pour supprimer une meta
delete_post_meta($postId, 'ma_meta');

// Récupère une métadonnée
get_post_meta($postId, 'ma_meta');

Pour pouvoir mettre à jour les informations nous allons ajouter une "metabox" qui s'affichera dans l'interface d'administration. On utilisera 2 actions :

  • add_meta_boxes, permet d'enregistrer notre boite et permettra à une fonction de déclarer les boîtes à ajouter via la fonction add_meta_box()
  • save_post, permettra de se greffer à la sauvegarde de l'article et de mettre en place la persistance des informations.

Voici un exemple de code, sous forme de classe, pour vous faire une idée du fonctionnement générale du processus.

<?php

class SponsoMetaBox {

    const META_KEY = 'montheme_sponso';
    const NONCE = '_montheme_sponso_nonce';

    public static function register () {
        add_action('add_meta_boxes', [self::class, 'add'], 10, 2);
        add_action('save_post', [self::class, 'save']);
    }

    public static function add ($postType, $post) {
        if ($postType === 'post' && current_user_can('publish_posts', $post)) {
            add_meta_box(self::META_KEY, 'Sponsoring', [self::class, 'render'], 'post', 'side');
        }
    }

    public static function render ($post) {
        $value = get_post_meta($post->ID, self::META_KEY, true);
        wp_nonce_field(self::NONCE, self::NONCE);
        ?>
        <input type="hidden" value="0" name="<?= self::META_KEY ?>">
        <input type="checkbox" value="1" name="<?= self::META_KEY ?>" <?php checked($value, '1') ?>>
        <label for="monthemesponso">Cet article est sponsorisé ?</label>
        <?php
    }

    public static function save ($post) {
        if (
            array_key_exists(self::META_KEY, $_POST) && 
            current_user_can('publish_posts', $post) &&
            wp_verify_nonce($_POST[self::NONCE], self::NONCE)
            ) {
            if ($_POST[self::META_KEY] === '0') {
                delete_post_meta($post, self::META_KEY);
            } else {
                update_post_meta($post, self::META_KEY, 1);
            }
        }
    }

}

Vous pourrez ensuite récupérer cette métadonnées dans vos page à l'aide de la fonction get_post_meta().

    <?php if(get_post_meta(get_the_ID(), SponsoMetaBox::META_KEY, true) === '1'): ?>
      <div class="alert alert-info">
        Cet article est sponsorisé
      </div>
    <?php endif ?>