Ich bin auf der nächtlichen Suche nach einem benutzerdefinierten Einweg-Widget .
Sobald eine Instanz davon zu einem Seitenleistenfenster im Customizer hinzugefügt wurde , sollte das Steuerelement im Bereich "Verfügbare Widgets" als deaktiviert angezeigt werden (oder alternativ ganz verschwinden).
So würde es aussehen (beachten Sie das visuell deaktivierte Widget auf der rechten Seite):
Das benutzerdefinierte Widget ist registriert und alles, aber ich bin bei der Einweganforderung festgefahren.
Technische Daten
- Skalierung ist kein Problem. Es ist in Ordnung, nur 1 registrierte Seitenleiste anzunehmen. Der Ansatz kann darin bestehen, die Verwendung des Widgets entweder auf 1 pro Seitenleiste oder auf 1 pro alle registrierten Seitenleisten zu beschränken - beide wären vorerst gleich gut.
- Die Widgets-Seite im Backend ist kein Problem. Dies ist nicht erforderlich, um auf der Widgets- Seite unter Darstellung im Back-End gleich gut zu funktionieren . Es muss nur im Customizer funktionieren.
Fragen
- Vor etwa 250 Jahren waren alle Widgets einmalig. Kennt jemand einen legitimen Weg, um diese Zeiten zurückzubringen und ein benutzerdefiniertes Widget nur 1x über die Widget-API verwenden zu lassen?
- Wenn nicht (was ich annehme, nachdem ich eine ganze Reihe von Kerndateien durchgearbeitet habe), würde ich wahrscheinlich auf einen CSS-basierten Ansatz zurückgreifen (Zeigerereignisse, Pseudoelement-Overlay, was auch immer). Würde irgendeine Art von Seele meinem sehr begrenzten Customizer / JavaScript-Wissen mit einem grundlegenden Ansatz zum Hinzufügen / Entfernen einer dedizierten CSS-Klasse zum Widget-Steuerelement im "verfügbaren" Bereich (der rechts) helfen, sobald eine Instanz des Widgets vorhanden ist? wurde zur Seitenleiste hinzugefügt / entfernt?
Was ich bisher versucht habe
- Durchsuchte einen ganzen Teil der Kerndateien.
- Lesen Sie dies und das , aber keines scheint praktisch zu sein.
- Bastelte an jQuery-Ereignissen
widget-added
,widget-updated
undwidget-synced
, aber verpasse ein Ereignis für "Widget gelöscht".
Vielen Dank im Voraus!
Update: Ich habe meinen Proof of Concept noch nicht in einem öffentlichen Repo veröffentlicht, würde es natürlich tun.
Lösung
Ich habe die von Kraftner unten freundlicherweise zur Verfügung gestellte Lösung in ein Proof-of-Concept-Plugin auf GitHub verpackt .
quelle
WP_Widget
beispielsweise: gist.github.com/westonruter/7141599Antworten:
Ansatz
Also habe ich mir das angeschaut und mein Ansatz ist folgender:
Haftungsausschluss
Dies hat die folgenden Einschränkungen:
Der Code
Nachdem wir den Haftungsausschluss erstellt haben, schauen wir uns den Code an:
Nebenbemerkung: Verwenden Sie die
customize_controls_enqueue_scripts
Aktion, um das Skript hinzuzufügen.Sie könnten dies wahrscheinlich erweitern, um es auf eine Basis pro Seitenleiste anstatt global zu beschränken. Ich würde sagen, hören Sie sich die Aktivierung einer Seitenleiste an und zählen Sie dann die Widgets in dieser Seitenleiste. Aber ich fand auch keine Zeit, mich damit zu befassen.
quelle