主にサイト管理者が各ウィジェットがサイト内のどこに表示されるかを理解できるようにするために、管理パネルのウィジェットページを少し違った方法で設計します。
そのためには、widgets.phpがレンダリングするHTMLを変更する必要があります(単にcssを変更するだけでは不十分です)。コアに触れずにそれを行うにはどうすればよいでしょうか?
主にサイト管理者が各ウィジェットがサイト内のどこに表示されるかを理解できるようにするために、管理パネルのウィジェットページを少し違った方法で設計します。
そのためには、widgets.phpがレンダリングするHTMLを変更する必要があります(単にcssを変更するだけでは不十分です)。コアに触れずにそれを行うにはどうすればよいでしょうか?
回答:
WordPressを3.3.1にアップグレードした場合(絶対にそうする必要があります)、管理者の各ウィジェット領域には、CSSを介してターゲットにするために使用できるIDがあり、これで十分です。例については、http://core.trac.wordpress.org/ticket/18334を参照してください。
頭の中で問題を解決することはできませんが、完全な解決策をとる時間はありません。だから私はここに自分の考えを書き留めてから、小さな賞金を設定します。
アクションがある'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テンプレートとスタイルシートの2つのファイルが必要です。
私は使用します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の競合。サイドバーが登録されていない場合に役立つメッセージを表示します(サイドバーの説明?)。ユーザーがウィジェットをプレビューボックスにドラッグしようとするとどうなりますか?:)