Sono in missione notturna per creare un widget personalizzato monouso .
Non appena una sua istanza è stata aggiunta a un pannello della barra laterale nel Personalizzatore , il suo controllo nel pannello Widget disponibili dovrebbe essere visualizzato come disabilitato (o, in alternativa, scomparire del tutto).
Ecco come apparirebbe (notare il widget visivamente "disabilitato" sulla destra):
Il Widget personalizzato è registrato e tutto, ma sono bloccato al requisito di uso singolo.
Specifiche
- La scala non è un problema. Va bene presumere solo 1 barra laterale registrata. L'approccio può essere quello di limitare l'uso del widget a 1 per barra laterale o a 1 per tutte le barre laterali registrate, entrambe per ora andrebbero ugualmente bene.
- La pagina Widget sul back-end non è un problema. Questo non è necessario per funzionare altrettanto bene nella pagina Widget in Aspetto sul back-end. Deve funzionare solo nel Customizer.
Domande
- Circa 250 anni fa, tutti i widget erano "monouso". Qualcuno conosce un modo legittimo per riportare quei tempi e fare in modo che un widget personalizzato venga utilizzato solo 1x tramite l'API Widget?
- Altrimenti (cosa che presumo dopo aver scavato attraverso una buona quantità di file core), probabilmente rimanderei ad un approccio basato su CSS (eventi puntatore, sovrapposizione di pseudo-elementi, qualunque cosa). Qualsiasi anima gentile aiuterebbe la mia conoscenza molto limitata di Customizer / JavaScript con un approccio di base su come aggiungere / rimuovere una classe CSS dedicata al controllo widget nel pannello "disponibile" (quello a destra) una volta che un'istanza di detto widget ha stato aggiunto / rimosso al pannello della barra laterale?
Quello che ho provato finora
- Scavato attraverso una buona parte di file core.
- Leggi questo e questo , ma nessuno dei due sembra pratico.
- Armeggiato con eventi jQuery
widget-added
,widget-updated
ewidget-synced
, ma perdere un evento per “widget di cancellata”.
Grazie mille in anticipo!
Aggiornamento: non ho ancora messo la mia prova di concetto su un repository pubblico, lo farebbe ovviamente.
Soluzione
Ho racchiuso la soluzione condivisa gentilmente da Kraftner di seguito in un plugin di prova del concetto su GitHub .
WP_Widget
, ad esempio: gist.github.com/westonruter/7141599