Widget exemple les options ne montrant pas correctement
-
16-10-2019 - |
Question
J'ai une configuration comme
function form($instance) {
$defaults = array(
'title' => 'Recent Products',
'number_products' => 3
);
$instance = wp_parse_args($instance, $defaults);
mais mon titre est ok, mais toujours number_products ne montre pas. i debuged dans NetBeans et a constaté que la forme () est exécuté 2 fois et 1ère fois, les variables ressemblent
$instance = array(0)
// after wp_parse_args,
$instance = array('title' => 'Recent Products', 'number_products' => 3);
le 2 course de wp_parse_args
, je ne sais pas pourquoi il court la 2ème fois,
$instance = array('title' => 'Recent Products', 'number_products' => null);
// after wp_parse_args
$instance = array('title' => 'Recent Products', 'number_products' => null);
Je ne sais pas vraiment ce qu'il se passe ... peut some1 Enlighten moi?
La solution
i a finalement trouvé la réponse, le fait pas un problème avec le code i posté. son dans la fonction de update()
. J'ai un code de validation
function update($new_instance, $old_instance) {
$instance['title'] = esc_attr(strip_tags($new_instance['title']));
if (is_int($new_instance['number_products'])) {
if ($new_instance['number_products'] > 0)
$instance['number_products'] = $new_instance['number_products'];
else
$instance['number_products'] = 1;
} else {
$instance['number_products'] = $old_instance['number_product'];
}
return $instance;
}
le problème est à 2 endroits. Je devrais utiliser is_numeric
sur is_int
, la raison est
Pour tester si une variable est un nombre ou un chaîne numérique (par exemple, en entrée de formulaire, qui est toujours une chaîne), vous devez utiliser is_numeric ().
puis, dans l'autre, $old_instance['number_product']
doit avoir être au pluriel $old_instance['number_products']
Autres conseils
Je ne suis pas sûr de deux pistes soit. Si vous aviez essayé le dumping juste fonction à l'intérieur du contenu au lieu de débogage? Quelque chose comme ceci:
function form( $instance ) {
var_dump( $instance );
$defaults = array(
'title' => 'Recent Products',
'number_products' => 3
);
$instance = wp_parse_args($instance, $defaults);
var_dump( $instance );