Я не могу выбросить вопрос из головы, но у меня нет времени для полного решения. Поэтому я просто записываю свою идею здесь, а затем я назначу небольшую награду.
Существует действие 'widgets_admin_page'
в wp-admin/widgets.php
выше другого контента. Вы можете разместить окно предварительного просмотра здесь.
Образец кода:
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>';
}
Это распечатывает массив всех зарегистрированных боковых панелей. Вы должны пройти через все боковые панели, чтобы найти зарегистрированные виджеты.
Чтобы сделать предварительный просмотр полезным, вам понадобятся два файла: шаблон HTML и таблица стилей.
Я бы использовал add_theme_support()
.
Пример кода для темы functions.php
:
add_theme_support(
'widget_preview',
array (
'template' => get_stylesheet_directory() . '/widget-preview.php',
'stylesheet' => get_stylesheet_directory() . '/widget-preview.css'
)
);
В show_widget_preview()
вас ставят таблицу стилей и загружают шаблон. Рендеринг зарегистрированных боковых панелей в предопределенных заполнителей в widget-preview.php
.
Обновите шаблон в соответствии с AJAX после того, как пользователь нажал кнопку « Сохранить» в виджете.
Задачи: принять во внимание режим доступности, небольшие окна и конфликты CSS. Показывать полезное сообщение, когда боковая панель не зарегистрирована (описания боковой панели?). Что должно произойти, когда пользователь пытается перетащить виджет в окно предварительного просмотра? :)