Je suis en quête nocturne pour créer un widget personnalisé à usage unique .
Dès qu'une instance de celui-ci a été ajoutée à un panneau de la barre latérale dans le Customizer , son contrôle sur le panneau Widgets disponibles doit être affiché comme désactivé (ou bien disparaître complètement).
Voici à quoi cela ressemblerait (notez le widget visuellement «désactivé» à droite):
Le widget personnalisé est enregistré et tout, mais je suis coincé à l'exigence à usage unique.
Spécifications
- L'échelle n'est pas un problème. Il est acceptable de supposer qu'une seule barre latérale enregistrée. L'approche peut être de limiter l'utilisation du widget soit 1 par barre latérale, ou à 1 pour tous serait tout aussi bien à la fois enregistrés sidebars pour l' instant.
- La page Widgets sur le back-end n'est pas un problème. Cela n'est pas nécessaire pour fonctionner aussi bien sur la page Widgets sous Apparence sur le back-end. Il ne doit fonctionner que dans le Customizer.
Des questions
- Il y a environ 250 ans, tous les widgets étaient à «usage unique». Quelqu'un connaît-il un moyen légitime de ramener ces temps et de faire en sorte qu'un widget personnalisé ne soit utilisé qu'une seule fois via l'API Widget?
- Sinon (ce que je suppose après avoir creusé une bonne partie des fichiers de base), je m'en remettrais probablement à une approche basée sur CSS (événements de pointeur, superposition de pseudo-éléments, peu importe). Une âme aimable aiderait-elle mes connaissances très limitées de personnalisation / JavaScript avec une approche de base sur la façon d'ajouter / supprimer une classe CSS dédiée au contrôle de widget dans le panneau "disponible" (celui de droite) une fois qu'une instance dudit widget a été ajouté / supprimé au panneau de la barre latérale?
Ce que j'ai essayé jusqu'à présent
- Parcourez une bonne partie des fichiers de base.
- Lisez ceci et ceci , mais aucun ne semble pratique.
- Bricolée avec des événements jQuery
widget-added
,widget-updated
etwidget-synced
, mais manquer un événement pour « un widget supprimé ».
Merci d'avance!
Mise à jour: Je n'ai pas encore mis ma preuve de concept sur un repo public, je le ferais, bien sûr.
Solution
J'ai enveloppé la solution aimablement partagée par kraftner ci-dessous dans un plugin de preuve de concept sur GitHub .
WP_Widget
, par exemple: gist.github.com/westonruter/7141599