Metabox et wp_editor : interpréter les shortcodes

Pour faire suite à nos autres tutoriels sur les shortcodes et les metabox, on va voir ici comment utiliser des shortcodes dans une metabox contenant la fonction wp_editor. Par défaut, si vous créez une metabox contenant la fonction wp_editor, en affichant la metabox, l’éditeur n’interprétera pas votre shortcode. Il le ressortira tel quel dans le texte, c’est à dire :

[mon_shortocde]mon contenu[/mon_shortcode]

Créer une metabox avec la fonction wp_editor

Pour rappel voici une manière de créer une metabox qui embarque l’éditeur de texte de wordpress.

//Metabox genes
function custom_left_meta_box() {
if( 'post.php' == basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']) && !isset($_GET['post_type']) ) {

// get post ID
$postid = $_GET['post'];

// check the template file name
if ( 'infographie.php' == get_page_template_slug($postid)) {
add_meta_box (
'custom-left',
__('Custom Left', 'custom-left') ,
'custom_left',
'post'
);
}
}
}
//Displaying the meta box
function custom_left($post) {
echo "<h3>Add Your Left text Here</h3>";
$content = get_post_meta($post->ID, 'custom_left', true);
//This function adds the WYSIWYG Editor
wp_editor (
$content ,
'custom_left',
array ( "media_buttons" => true )
);
}

//This function saves the data you put in the meta box
function custom_left_save_postdata($post_id) {
if( isset( $_POST['custom_left_nonce'] ) && isset( $_POST['page'] ) ) {
//Not save if the user hasn't submitted changes
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// Verifying whether input is coming from the proper form
if ( ! wp_verify_nonce ( $_POST['custom_left_nonce'] ) ) {
return;
}
// Making sure the user has permission
if( 'post' == $_POST['page'] ) {
if( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
}
}

if (!empty($_POST['custom_left'])) {
$data = $_POST['custom_left'];
update_post_meta($post_id, 'custom_left', $data);
}
}
add_action('save_post', 'custom_left_save_postdata');
add_action('admin_init', 'custom_left_meta_box');

On crée ici une metabox « custom left ». Celle-ci va par exemple nous aider à ajouter du contenu sur la partie gauche de la page. On souhaite ensuite dans cet éditeur insérer du contenu, notamment via des shortcodes. On limite son affichage à un seul template de page nommé ici « infographie ».

Dans notre fonction d’affichage « custom_left’ on fait appel à la fonction wp_editor. Cela va nous permettre d’avoir un deuxième éditeur de texte dans la page d’édition de la page.

Lire un shortcode dans la metabox

Ensuite, dans notre fichier qui va afficher le contenu, on fait appel à notre metabox, en l’entourant de la fonction wpautop(), qui va filtrer et formatter notre texte.

<div class="left_text">
<?php $left = get_post_meta($post->ID, 'custom_left', true);
echo do_shortcode( wpautop( $left ) );?>
</div>

A présent, vous devriez pouvoir insérer vos shortcodes dans toutes vos metabox.