Estou em uma missão noturna para criar um widget de uso único personalizado .
Assim que uma instância for adicionada a um painel da barra lateral no Customizer , seu controle no painel Widgets disponíveis deverá ser exibido como desativado (ou, como alternativa, desaparecer completamente).
É assim que ficaria (observe o widget visualmente "desativado" à direita):
O widget personalizado está registrado e tudo, mas estou preso ao requisito de uso único.
Especificações
- Escala não é um problema. Não há problema em assumir apenas 1 barra lateral registrada. A abordagem pode ser limitar o uso do widget a 1 por barra lateral ou a 1 por todas as barras laterais registradas - ambas seriam igualmente boas por enquanto.
- A página Widgets no back-end não é um problema. Isso não é necessário para funcionar igualmente bem na página Widgets , em Aparência, no back-end. Ele só tem que funcionar no Customizer.
Questões
- Cerca de 250 anos atrás, todos os widgets costumavam ser de "uso único". Alguém conhece uma maneira legítima de trazer esses tempos de volta e fazer com que um widget personalizado seja usado apenas 1x por meio da API do Widget?
- Se não (o que eu suponho depois de ter pesquisado uma boa quantidade de arquivos principais), provavelmente aderia a uma abordagem baseada em CSS (eventos-ponteiro, sobreposição de pseudo-elemento, qualquer que seja). Alguma alma amável ajudaria meu conhecimento muito limitado do Customizer / JavaScript com uma abordagem básica sobre como adicionar / remover uma classe CSS dedicada ao controle de widget no painel "disponível" (o da direita) assim que uma instância do referido widget tiver foi adicionado / removido ao painel da barra lateral?
O que eu tentei até agora
- Pesquise vários arquivos principais.
- Leia isto e isto , mas nenhum deles parece prático.
- Consertou com eventos jQuery
widget-added
,widget-updated
ewidget-synced
, mas perca um evento para “Widget excluído”.
Agradecemos toneladas de antecedência!
Atualização: ainda não coloquei minha prova de conceito em um repositório público, faria, é claro.
Solução
Embrulhei a solução gentilmente compartilhada pelo kraftner abaixo em um plug-in de prova de conceito no GitHub .
widgets
theme-customizer
glueckpress
fonte
fonte
WP_Widget
, por exemplo: gist.github.com/westonruter/7141599Respostas:
Aproximação
Então, eu olhei para isso e minha abordagem é a seguinte:
aviso Legal
Isso tem as seguintes limitações:
O código
Agora que terminamos o aviso, vejamos o código:
Nota lateral: use a
customize_controls_enqueue_scripts
ação para adicionar o script.Você provavelmente poderia estender isso para limitá-lo a trabalhar uma base por barra lateral em vez de globalmente. Eu diria para ouvir a ativação de uma barra lateral e depois contar os widgets nessa barra lateral. Mas não encontrei tempo para analisar isso também.
fonte