Je travaille sur un panneau d'options pour un plugin. Et avoir un tableau publié et mis à jour dans le tableau des options. J'utilise la fonction array_map () pour parcourir le tableau avec sanitize_text_fields ()
Est-ce une façon optimale de procéder?
if( ! empty( $_POST['my_array'] ) ) {
foreach( $_POST['my_array'] as $value ) {
$value = array_map( 'sanitize_text_field', $value );
update_option( 'my_option_value', $value );
}
}
Ce n'est probablement pas une bonne idée. Premièrement, si vous avez d'autres types de champs, vous devriez probablement utiliser des fonctions plus appropriées. Par exemple, les champs textarea
doivent être nettoyés avec sanitize_textarea_field()
, et les sélecteurs de couleurs doivent être nettoyés avec sanitize_hex_color()
.
Vous devez également considérer que $_POST
contient probablement aussi des champs que vous ne pas voulez enregistrer, tels que les entrées cachées qui alimentent l'API Settings: option_page
, action
_wpnonce
, et _wp_http_referer
.
Enfin, cela signifie que votre fonction accepte essentiellement toutes les entrées et les ajoute à la base de données. Bien que la désinfection et l'échappement des entrées signifient qu'ils ne peuvent pas faire trop de dégâts, vous ne codez toujours pas de manière défensive. Idéalement, vous devez ajouter à la liste blanche les entrées que vous prévoyez de soumettre, et ne les soumettre que.
Cependant, vous ne devriez pas avoir besoin de gérer le $_POST
lorsque vous utilisez correctement les paramètres ou les API de personnalisation, ce qui suggère que vous ne construisez pas correctement ce panneau d'options. Lorsque vous utilisez correctement l'une de ces API, la fonction de désinfection peut être spécifiée lors de l'enregistrement du paramètre, et aucune manipulation de la soumission ne devrait être nécessaire.
Je pense que vous êtes sur la bonne voie. Ce que vous pouvez faire pour vous améliorer, c'est:
Séparez la logique des fonctions pour augmenter la lisibilité ou faites un bon commentaire de ce que vous faites. Par exemple.:
...
function mytheme_sanitize_fields($fields){
foreach($fields as $field){
mytheme_sanitize_field($field);
}
}
function mytheme_sanitize_field($field){
if( is_array($field){
$value = array_map( 'sanitize_text_field', $field );
}
else{
$value = sanitize_text_field($field);
}
update_option('yourkey', $value);
...
}
...
mytheme_sanitize_fields($_POST);
...
}