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 .
widgets
theme-customizer
glueckpress
la source
la source
WP_Widget
, par exemple: gist.github.com/westonruter/7141599Réponses:
Approche
J'ai donc examiné cela et mon approche est la suivante:
Avertissement
Cela présente les limitations suivantes:
Le code
Maintenant que la clause de non-responsabilité est terminée, examinons le code:
Sidenote: utilisez l'
customize_controls_enqueue_scripts
action pour ajouter le script.Vous pouvez probablement l'étendre pour le limiter à travailler sur une base par barre latérale au lieu de globalement. Je dirais écouter l'activation d'une barre latérale, puis compter les widgets de cette barre latérale. Mais je n'ai pas trouvé le temps d'examiner cela aussi.
la source