Tôi không thể lấy câu hỏi ra khỏi đầu, nhưng tôi không có thời gian cho một giải pháp hoàn chỉnh. Vì vậy, tôi chỉ viết ra ý tưởng của mình ở đây, sau đó tôi sẽ đặt một khoản tiền thưởng nhỏ.
Có một hành động 'widgets_admin_page'
ở wp-admin/widgets.php
trên các nội dung khác. Bạn có thể đặt một hộp xem trước ở đây.
Mã mẫu:
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>';
}
Điều này in ra một mảng của tất cả các thanh bên đã đăng ký. Bạn phải đi qua tất cả các thanh bên để tìm các vật dụng đã đăng ký.
Để làm cho bản xem trước hữu ích, bạn cần hai tệp: mẫu HTML và biểu định kiểu.
Tôi sẽ sử dụng add_theme_support()
.
Mã mẫu cho chủ đề functions.php
:
add_theme_support(
'widget_preview',
array (
'template' => get_stylesheet_directory() . '/widget-preview.php',
'stylesheet' => get_stylesheet_directory() . '/widget-preview.css'
)
);
Trong show_widget_preview()
bạn enqueue biểu định kiểu và tải mẫu. Kết xuất các thanh bên đã đăng ký trong trình giữ chỗ được xác định trước trong widget-preview.php
.
Cập nhật mẫu trên AJAX sau khi người dùng nhấn nút Lưu trong tiện ích.
Thách thức: Đưa chế độ trợ năng vào tài khoản, các cửa sổ nhỏ và xung đột CSS. Hiển thị một thông báo hữu ích khi không có thanh bên được đăng ký (mô tả thanh bên?). Điều gì sẽ xảy ra khi người dùng cố gắng kéo một widget vào hộp xem trước? :)