Je crée un widget, il doit stocker environ 10 identifiants. En ce moment, j'utilise la méthode de champ suivante pour stocker chacun de l'ID dans un champ distinct. Il stocke les données de chaque champ dans un séparément dans le wordpress. Est-il possible de stocker les données de tous les champs dans une seule ligne dans wordpress pour examen à l'aide d'un tableau?
<input
class="widefat"
id="<?php echo $this->get_field_id('item1_id'); ?>"
name="<?php echo $this->get_field_name('item1_id'); ?>"
value="<?php echo $instance['item1_id']; ?>"
/>
<input
class="widefat"
id="<?php echo $this->get_field_id('item2_id'); ?>"
name="<?php echo $this->get_field_name('item2_id'); ?>"
value="<?php echo $instance['item2_id']; ?>"
/>
$instance
est un tableau et contient toutes les valeurs. Et que voulez-vous dire par «stocker les données de tous les champs sur une seule ligne»? Voulez-vous dire une ligne de base de données?Réponses:
Vous devez collecter plusieurs champs sous le même nom comme celui-ci…
… Et ajustez la logique de votre widget à cela.
Voici un widget de démonstration très simple:
Backend
L'extrémité avant
la source
printf
Syntaxe très éléganteclass="widefat"
pour les champs.La réponse ci-dessus est bonne si vous avez besoin que les champs soient numérotés. Dans mon cas, je ne l'ai pas fait. J'ai un widget avec des options qui permettent à l'utilisateur de sélectionner n'importe quel nombre de catégories à utiliser dans le widget.
Voici mon widget
form
. - Trois choses importantes iciarray()
si la valeur du widget n'est pas définie<label>
name
attribut de formulaire , notez que j'attache un[]
à la fin. Cela indique à PHP que je soumets un tableau de valeurs pour cette clé<label><input type="checkbox" ...></label>
. - Chacune de nos cases à cocher n'aura pas d'id
attribut unique , donc l'<label>
for
attribut ne fonctionnera pas. Nous pourrions générer des identifiants uniques, mais c'est un problème. Si vous enveloppez simplement l'étiquette autour de l'entrée, l'étiquette est correctement associée sans les tracas de connexion dufor
+id
Maintenant, le code
Et voici ma fonction de mise à jour
Je souhaite enregistrer les identifiants de catégorie dans un tableau, qui sont des nombres, donc j'utilise
array_map
avecintval
pour m'assurer que toutes les données soumises sont des entiers valides. De plus, j'utilisearray_filter
pour supprimer toutes les soumissions invalides.Il est particulièrement difficile de décrire ce truc WordPress. Si vous avez des questions, je me ferai un plaisir de vous en dire plus.
la source