Comment ferais-je pour ne pas laisser des données vides dans wordpress?
<?php
foreach($_POST['eirepanel_inline_ads_options_name'] as $post_eirepanel_inline_ads_options_name):
if(empty($post_eirepanel_inline_ads_options_name)):
echo 'empty';
else:
update_option('eirepanel_inline_ads_options', $_POST);
$eirepanel_inline_ads_options = get_option('eirepanel_inline_ads_options');
endif;
endforeach;
?>
Plus important encore, vous ne devez pas laisser * de données _POST * non approuvées et non sécurisées dans WordPress.
Mais je pense que le problème est que vous mettez à jour l'option avec toutes les données $ _POST, au lieu de la clé de tableau appropriée:
update_option('eirepanel_inline_ads_options', $_POST);
Devrait probablement être quelque chose comme:
update_option('eirepanel_inline_ads_options', $_POST['eirepanel_inline_ads_options_name']);
Les options de votre plugin sont-elles discrètes (une entrée de base de données par option) ou un tableau d’options?
EDIT
Puisque vous utilisez un tableau d’options, la bonne approche serait:
$_POST
($input = array()
)$valid_input = array()
)$_POST
$valid_data
avec le tableau $input
désinfecté$valid_data
mis à jour dans la base de donnéespar exemple.
$input = ( isset( $_POST ) ? $_POST : false );
$valid_input = get_option( 'eirepanel_inline_ads_options' );
foreach ( $input as $key ) {
// sanitize data here
}
$valid_input = array_merge( $valid_input, $input );
update_option( 'eirepanel_inline_ads_options', $valid_input );
Juste rapide et sale, mais devrait vous donner une idée.
De plus, l'utilisation de l'API Settings serait particulièrement utile ici.
Suite à votre réponse aux suggestions de @ Chip, je vous conseillerais de nommer vos entrées de la manière suivante;
<input type="text" name="eire[option_key_name]" value="hello world" />
<input type="text" name="eire[option_key_another]" />
<input type="text" name="eire[nasty_key_possibility]" />
Puis dans votre code;
$options = shortcode_atts( array(
'option_key_name' => 'default value',
'option_key_another' => 'foobar'
), ( array ) $_POST['eire'] );
$options
ne contiendra plus que les clés explicites passées à shortcode_atts()
, les données de $_POST
remplaçant les valeurs par défaut.
Array (
option_key_name => hello world,
option_key_another' => foobar
)
Vous verrez que j’utilise les noms de tableaux d’entrée , afin d’espacer les noms de vos données $_POST
(par boucle sur eux et retirez-le avant de sauvegarder).
Remarque: Ceci ne supprime que les clés dont nous ne voulons pas . Vous voudrez probablement aller plus loin et assainir les valeurs individuelles, en fonction de leur type de données. S'ils sont tous identiques, vous pouvez mapper un rappel sur le tableau et en avoir terminé.
Par exemple, ce sont tous des champs de texte brut;
$options = array_map( 'wp_strip_all_tags', $options );