No puedo sacar la pregunta de mi cabeza, pero no tengo tiempo para una solución completa. Así que solo escribo mi idea aquí, luego estableceré una pequeña recompensa.
Hay una acción 'widgets_admin_page'
por wp-admin/widgets.php
encima del otro contenido. Puede colocar un cuadro de vista previa aquí.
Código de muestra:
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>';
}
Esto imprime una matriz de todas las barras laterales registradas. Tienes que recorrer todas las barras laterales para encontrar los widgets registrados.
Para que la vista previa sea útil, necesita dos archivos: una plantilla HTML y una hoja de estilo.
Me gustaría utilizar add_theme_support()
.
Código de muestra para el tema functions.php
:
add_theme_support(
'widget_preview',
array (
'template' => get_stylesheet_directory() . '/widget-preview.php',
'stylesheet' => get_stylesheet_directory() . '/widget-preview.css'
)
);
En la show_widget_preview()
cola de la hoja de estilo y cargar la plantilla. Renderice las barras laterales registradas en los marcadores de posición predefinidos en widget-preview.php
.
Actualice la plantilla por AJAX después de que el usuario presione el botón Guardar en un widget.
Desafíos: tenga en cuenta el modo de accesibilidad, las ventanas pequeñas y los conflictos CSS. Mostrar un mensaje útil cuando no hay una barra lateral registrada (¿descripciones de la barra lateral?). ¿Qué debería suceder cuando un usuario intenta arrastrar un widget al cuadro de vista previa? :)