web-dev-qa-db-fra.com

Le widget de devis aléatoire est utilisé dans plusieurs barres latérales

J'ai créé un widget personnalisé et l'ai placé dans functions.php. Vous pouvez voir le widget ici:

http://Pastebin.com/3uWpeaFx

(J'ai également créé un widget similaire qui saisit une image aléatoire. Il est inclus dans Pastebin.)

Le widget permet aux utilisateurs de connecter jusqu'à dix blocs de texte/HTML, de les stocker dans un tableau dans JS et d'en afficher un au hasard à l'aide de JS.

Ce sont des widgets super simples basés sur le widget texte par défaut fourni avec WP. (Je ne suis pas un expert PHP, il existe donc probablement un moyen plus élégant de les créer, mais ils sont simples à utiliser, ce dont le client avait besoin.)

Le problème que je rencontre est le suivant:

L'utilisation de plusieurs widgets de texte aléatoire, même sur plusieurs barres latérales différentes affichées sur des pages différentes, fait en sorte que tous, à l'exception de l'original, renvoient undefined.

Le texte que vous avez mis dans la zone semble être correctement stocké et peut être modifié via l'interface d'administration WP; mais quand il s'agit de l'afficher sur le front-end, il ne fait pas correctement écho au texte.

Je suis sûr que c'est quelque chose de simple qui me manque dans le widget ... des indices?

Merci!

1
bigsweater

Aucun parent nécessaire: la différence entre un widget qui ne fonctionne pas et un widget qui fonctionne est la suivante:

$text1 = apply_filters( 'widget_text1', $instance['text1'], $instance );

contre:

$text1 = apply_filters( 'widget_text1', empty($instance['text1']) ? '' : $instance['text1'], $instance, $this->id_base);

Je me suis rendu compte de placer plusieurs widgets Random Text sur la même page, leurs titres fonctionnaient, mais pas leur contenu textuel. J'ai donc copié les propriétés (empty ($ instance ... etc.) Du titre dans chacune des instances de texte.

Les widgets eux-mêmes ont été instanciés, mais pas les zones de texte. Au moins, c'est ce qui se passait, je pense. Je ne connais pas assez PHP pour savoir avec certitude.

Si quelqu'un comprend pourquoi la deuxième version fonctionne et la première pas, je serais heureux de l'entendre. :)

1
bigsweater