Não consigo tirar a pergunta da cabeça, mas não tenho tempo para uma solução completa. Então, apenas anotei minha ideia aqui, depois estabelecerei uma pequena recompensa.
Há uma ação 'widgets_admin_page'
em wp-admin/widgets.php
cima do outro conteúdo. Você pode colocar uma caixa de visualização aqui.
Código de amostra:
add_action( 'widgets_admin_page', 'show_widget_preview' );
function show_widget_preview()
{
$preview_widgets = $GLOBALS['wp_registered_sidebars'];
unset ( $preview_widgets['wp_inactive_widgets'] );
print '<div style="border:2px solid #ddf;padding:20px">'
. '<pre>' . htmlspecialchars( print_r( $preview_widgets, TRUE ) ) . '</pre>'
. '</div>';
}
Isso imprime uma matriz de todas as barras laterais registradas. Você precisa percorrer todas as barras laterais para encontrar os widgets registrados.
Para tornar a visualização útil, você precisa de dois arquivos: um modelo HTML e uma folha de estilos.
Eu usaria add_theme_support()
.
Código de exemplo para o tema functions.php
:
add_theme_support(
'widget_preview',
array (
'template' => get_stylesheet_directory() . '/widget-preview.php',
'stylesheet' => get_stylesheet_directory() . '/widget-preview.css'
)
);
Em show_widget_preview()
enfileirar a folha de estilos e carregar o modelo. Renderize as barras laterais registradas nos espaços reservados predefinidos em widget-preview.php
.
Atualize o modelo por AJAX depois que o usuário pressionou o botão Salvar em um widget.
Desafios: leve em consideração o modo de acessibilidade, pequenas janelas e conflitos de CSS. Mostrar uma mensagem útil quando nenhuma barra lateral estiver registrada (descrições da barra lateral?). O que deve acontecer quando um usuário tenta arrastar um widget para a caixa de visualização? :)