Avec le plugin cmb2, j'ai créé une metabox avec un metafield textarea de cette façon:
function myprefix_register_metabox() {
$prefix = 'myprefix_';
$cmb = new_cmb2_box( array(
'id' => $prefix . 'metabox',
'title' => esc_html__( 'My Metabox', 'cmb2' ),
'object_types' => array( 'page' ),
) );
$cmb->add_field( array(
'name' => esc_html__( 'Text Area for Code', 'cmb2' ),
'id' => $prefix . 'textarea_code',
'type' => 'textarea_code',
'sanitization_cb' => 'my_sanitize_text_callback',
) );
}
add_action( 'cmb2_admin_init', 'myprefix_register_metabox' );
J'utilise cette fonction de rappel pour assainir le contenu de metafield:
function my_sanitize_text_callback( $value, $field_args, $field ) {
$value = htmlentities( html_entity_decode( $value, ENT_QUOTES ), ENT_QUOTES );
return $value;
}
Tout fonctionne bien, mais comment puis-je afficher le contenu de la zone de texte stockée dans la base de données, avec les entités converties html_entity_decode()
dans l'écran d'édition du panneau d'administration, pour obtenir un texte plus lisible par l'homme?
J'ai vu que CMB2 offre la possibilité de créer une fonction d'échappement personnalisée avec laquelle les valeurs sont vérifiées avant d'être affichées. J'ai donc défini le paramètre escape_cb
dans le champ metafield de la manière suivante:
$cmb->add_field( array(
'name' => esc_html__( 'Text Area for Code', 'cmb2' ),
'id' => $prefix . 'textarea_code',
'type' => 'textarea_code',
'sanitization_cb' => 'my_sanitize_text_callback',
'escape_cb' => 'my_escape_text_callback'
) );
Ensuite, j'ai créé la fonction de rappel pour échapper, afin de convertir les entités HTML en caractères correspondants:
function my_escape_text_callback( $value, $field_args, $field ) {
$escaped_value = html_entity_decode( $value, ENT_QUOTES );
return $escaped_value;
}
Maintenant, cela fonctionne très bien et dans l'écran d'édition du panneau d'administration, je visualise le texte lisible.