web-dev-qa-db-fra.com

Comment désinfecter la valeur post-méta-champ?

J'ai ajouté un champ méta pour la saisie de texte. Je souhaite autoriser certaines balises HTML telles que <strong> et <i> Par exemple: <strong>hello</strong> world

Je peux enregistrer la valeur du champ d'entrée sans désinfection et ce n'est pas un problème de cette façon:

if( isset( $_POST['my_field'] ) ){
    update_post_meta($post->ID, 'my_field', $_POST['my_field']);
}   

Toutefois, si j'utilise la fonction sanitize_text_field comme suit, les balises HTML seront supprimées lors de l'enregistrement:

if( isset( $_POST['my_field'] ) ){
    update_post_meta($post->ID, 'my_field', sanitize_text_field($_POST['my_field']));
}   

Quel serait le meilleur moyen de désinfecter les valeurs contenant des balises HTML avant de les stocker?

1
jay

HTML dans les champs personnalisés est, de mon point de vue, un cas d'utilisation étrange de champs personnalisés. Encore plus si le but du code HTML utilisé est juste look and feel (<strong> et <i> peuvent être vus comme look and feel). Il est vraiment préférable d'utiliser le balisage HTML sur la sortie du champ personnalisé ou d'utiliser CSS pour appliquer des styles gras/italique.

Ceci étant dit, vous pouvez essayer d'utiliser PHP strip_tags() functio n ou wp_kses() function . Les deux vous permettent de supprimer les balises HTML, mais certaines d'entre elles. Exemple utilisant wp_kses():

$allowed_html = array(
    'i' => array(),
    'strong' => array(),
);

if( isset( $_POST['my_field'] ) ){

    $meta_value = wp_kses( $_POST['my_field'], $allowed_html );

    update_post_meta( $post->ID, 'my_field', $meta_value );

}
1
cybmeta