Home » wordpress » Creer une meta box pour rendre des posts privés
Creer une meta box pour rendre des posts privés
Creer une meta box pour rendre des posts privés
Sur le modèle de Pippin Williamson on va créer un plugin pour à la fois créer des shortcodes pour rendre une partie d’un post privé, mais aussi pour donner la possibilité au client, sur la page d’édition , de définir le niveau d’accessibilité du post ou de la page.
?> function restrict_shortcode( $atts, $content = null ) { extract( shortcode_atts( array( 'userlevel' => 'none', ), $atts ) ); if ($userlevel == 'admin' && current_user_can('switch_themes')) { return do_shortcode($content); } if ($userlevel == 'editor' && current_user_can('moderate_comments')) { return do_shortcode($content); } if ($userlevel == 'author' && current_user_can('upload_files')) { return do_shortcode($content); } if ($userlevel == 'subscriber' && current_user_can('read')) { return do_shortcode($content); } if ($userlevel == 'none' && is_user_logged_in) { return do_shortcode($content); } else return '<span style="color: red;">Le contenu est visible uniquement par les ' . $userlevel . 's</span>'; } add_shortcode('restrict', 'restrict_shortcode');
Cette fonction va nous permettre déjà de privatiser l’article , en utilisant le shortcode suivant,
[restrict userlevel= »editor »] . . . Cet article est réservé aux utilisateurs ayant un niveau d’éditeurs uniquement . . . [/restrict]
Cela nous permet donc de restreindre tout ou une partie seulement d’un article à une certaine catégorie d’utilisateurs : admin, éditeur, auteur ou abonné.
On va ensuite étendre la fonctionnalité de notre plugin en reliant cette fonction à une metabox, afin que l’utilisateur aie la possibilité de définir à l’avance si un article ou une page sera visible de tous ou non.
Création de la métabox
//custom meta boxes $prefix = 'rc';
$meta_box = array( 'id' => 'rcMetaBox', 'title' => 'Rendre ce contenu privé', 'context' => 'normal', 'priority' => 'high', 'fields' => array( array( 'name' => 'User Level', 'id' => $prefix . 'UserLevel', 'type' => 'select', 'desc' => 'Choisissez qui peut consulter cette page / article', 'options' => array('None', 'Administrator', 'Editor', 'Author', 'Subscriber'), 'std' => 'None' ), array( 'name' => 'Extraire du RSS?', 'id' => $prefix . 'FeedHide', 'type' => 'checkbox', 'desc' => 'Cacher l'extrait de cette page ou artile pour le RSS?', 'std' => '' ) ) ); // Ajout de la box function rcAddMetaBoxes() { global $meta_box; foreach (array('post','page') as $type) add_meta_box($meta_box['id'], $meta_box['title'], 'rcShowMetaBox', $type, $meta_box['context'], $meta_box['priority']); } add_action('admin_menu', 'rcAddMetaBoxes');
Voici la suite de la fonction pour afficher notre metabox.
function rcShowMetaBox() { global $meta_box, $post;
// on utilise un nonce pour la verif echo '<input type="hidden" name="rcMetaNonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
echo '<table>';
foreach ($meta_box['fields'] as $field) { // get current post meta data $meta = get_post_meta($post->ID, $field['id'], true);
Cela nous ressort notre meta box dans l’éditeur, et on ajoute un nonce de vérification pour sécuriser la saisie.
Enfin la fonction d’enregistrement de notre metabox
function rcSaveData($post_id) { global $meta_box; // verifie le nonce if (!wp_verify_nonce($_POST['rcMetaNonce'], basename(__FILE__))) { return $post_id; } // vérifie l' autosave if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; } // vérifie les permissions if ('page' == $_POST['post_type']) { if (!current_user_can('edit_page', $post_id)) { return $post_id; } } elseif (!current_user_can('edit_post', $post_id)) { return $post_id; } foreach ($meta_box['fields'] as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; if ($new && $new != $old) { update_post_meta($post_id, $field['id'], $new); } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } } add_action('save_post', 'rcSaveData');
Tester le rôle utilisateur pour privatiser un article
Les fonctions suivantes vont nous permettre à l’affichage de tester le rôle de l’utilisateur pour afficher ou non l’article. La première fonction analyse les données de la metabox, et en fonction du rôle utilisateur inséré, affiche ou non un message d’erreur.