web-dev-qa-db-fra.com

Comment puis-je filtrer le contenu d'un métafield avant qu'il soit affiché dans l'administrateur?

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?

1
benny-ben

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.

0
benny-ben