主にサイト管理者が各ウィジェットがサイトのどこに表示されるのかを理解しやすくするために、管理者パネルのウィジェットページのデザインを少し変えてみます。
そのためには、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の衝突を考慮に入れる。サイドバーが登録されていないときに便利なメッセージを表示します(サイドバーの説明?)。ユーザーがウィジェットをプレビューボックスにドラッグしようとするとどうなりますか? :)
簡単な答えは、コアに触れずにはできないということです。
ただし、register_sidebar関数で各ウィジェット領域の説明(ウィジェット領域のタイトルの下にあるテキスト)を設定できます。