Estoy en una búsqueda nocturna para crear un widget personalizado de un solo uso .
Tan pronto como se haya agregado una instancia a un panel de barra lateral en el Personalizador , su control en el panel de Widgets disponibles debería mostrarse como deshabilitado (o alternativamente, desaparecer por completo).
Así es como se vería (observe el widget visualmente "deshabilitado" a la derecha):
El widget personalizado está registrado y todo, pero estoy atascado en el requisito de un solo uso.
Especificaciones
- La escala no es un problema. Está bien asumir solo 1 barra lateral registrada. El enfoque puede ser limitar el uso del widget a 1 por barra lateral, o a 1 por todas las barras laterales registradas, ambos estarían igualmente bien por ahora.
- La página de widgets en el back-end no es un problema. No es necesario que funcione igual de bien en la página de widgets en Apariencia en el back-end. Solo tiene que funcionar en el Personalizador.
Preguntas
- Hace unos 250 años, todos los widgets solían ser de "un solo uso". ¿Alguien sabe de una forma legítima de recuperar esos tiempos y hacer que un widget personalizado se use solo 1x a través de la API de widgets?
- De lo contrario (lo que supongo después de haber excavado una buena cantidad de archivos principales), probablemente diferiría a un enfoque basado en CSS (eventos de puntero, superposición de pseudoelementos, lo que sea). ¿Podría algún tipo de alma ayudar a mi conocimiento muy limitado de Customizer / JavaScript con un enfoque básico sobre cómo agregar / eliminar una clase CSS dedicada al control del widget en el panel "disponible" (el de la derecha) una vez que una instancia de dicho widget tiene ha sido agregado / eliminado al panel de la barra lateral?
Lo que probé hasta ahora
- Excavado en una buena parte de los archivos principales.
- Lea esto y esto , pero ninguno parece práctico.
- Vanamente con eventos de jQuery
widget-added
,widget-updated
ywidget-synced
, aunque se pierda un evento para “widget de borrado”.
Muchas gracias de antemano!
Actualización: Todavía no he puesto mi prueba de concepto en un repositorio público, lo haría, por supuesto.
Solución
Envolví la solución amablemente compartida por kraftner a continuación en un complemento de prueba de concepto en GitHub .
WP_Widget
, por ejemplo: gist.github.com/westonruter/7141599