私の(ページのみ、投稿なし)Wordpressサイトでは、サイドバーに入れる必要がある静的BLOBがいくつかあります。それらをウィジェットとして「ブロブ」と呼ぶ/ treamすることができます。少なくとも彼らは、 'teaser1'、 'teaser2'、 'disclaimer'、 'foo policy'のような固定のHTMLコンテンツを持っているでしょう...
私が必要なのは、それらをページごとに異なるように配置することです。ですから、これは単なる「アーカイブ」対「アーカイブ」だけではなく、「製品ページA」対「製品ページB」対「私たちについて」対「利用規約」についてです。
個々のエディタページwp-admin/post.php?post=196&action=edit
上でカスタムメタボックスをオン/オフにすることを考えていましたが、もちろんドラッグアンドドロップの快適さと通常のウィジェットの簡単な順序決定はもっと良いでしょう。
また、これらの静的スニペットをどのように保守(追加、削除、編集(HTMLテキストビューでも)できるか)する方法がわかりません...
個々の編集ページ(wp-admin/post.php?post=123&action=edit
)で、ウィジェット1、2、5、8が欲しいのではなく、それぞれのウィジェット/スニペットに移動するよりも、直感的に確認できます。次のページの "私が理解しているのは ディスプレイウィジェット の動作の仕方です...
それで理想的には私はウィジェットを追加/編集/削除することができるウィジェット(またはモジュールまたはスニペット)設定ページがあるでしょう。次に、個々の編集ページで、右側にメタボックスを追加して順番にドラッグします。
ウィジェットコンテキスト プラグインまたは ウィジェットロジック プラグインを使用してそれを行うことができます。
彼らはうまくいきます。より柔軟性があるので、私はWidget Contextを好みます。
プラグインのような単純なものを使うことについてはどうでしょうか。
私は Widgets Controller を使っていますが、それは良いものです。
WordPressのカテゴリ、投稿、およびページでウィジェットの表示/非表示を制御するプラグイン。
このプラグイン http://wordpress.org/extend/plugins/wp-page-widget/ は非常に優れており、ここにいくつかのスクリーンショットと詳細情報がありますそれについて http://codeandmore.com/products/wordpress-plugins/wp-page-widget/ 。かなりの数のサイトでそれを使っていて、何の問題もありませんでした。
それについての最もよいことはあなたが実際にウィジェットの領域に行かなくてもページの編集画面上のそれぞれの特定のページのためにウィジェットを管理することができるということです。
サイト上の特定のテンプレートに対してこれを行いました。そのテンプレートを持つすべてのページは、そのページ専用の1つ以上のウィジェットを許可する独自のウィジェットゾーンを持っています。動的なウィジェットロジックを提供するプラグインはいくつかありますが、このアプローチはよりターゲットを絞ったものであり、あなたの問題に適している可能性があります(それはその特定のWebサイトで私のものです)。
管理者は、これらのページにウィジェットを割り当てて設定できるように、ウィジェットゾーンをすべて登録する必要があります。
// dynamically add some widget zones for pages using some templates
add_action('sidebar_admin_setup', 'wpse_76601_actionSidebarAdminSetup');
/**
* handle action sidebar_admin_setup to check for dynamically created sidebars
* and make sure they're registered
*/
function wpse_76601_actionSidebarAdminSetup() {
global $post;
global $wp_registered_sidebars;
// find all pages that use template with dynamic widget zone
$query = new WP_Query(array(
'meta_key' => '_wp_page_template',
'meta_value' => 'wpse-template-dept.php',
'post_type' => 'page',
'nopaging' => true,
'orderby' => 'title',
'order' => 'ASC',
));
while ($query->have_posts()) {
$query->the_post();
$id = "wpse-{$post->ID}-aside";
// register any that aren't already registered
if (!isset($wp_registered_sidebars[$id])) {
register_sidebar( array(
'name' => $post->post_title . ' Asides',
'id' => $id,
'description' => 'Aside widgets for page ' . $post->post_title,
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
}
}
wp_reset_postdata();
}
それからページテンプレートで、ウィジェットゾーンは呼び出される前に再度登録されなければなりません。 wp_head()
を呼び出す前にテンプレートの先頭に追加するだけで、その特定のページにのみ登録されます。
function template_widgetsInit() {
global $post;
register_sidebar( array(
'name' => $post->post_title . ' Asides',
'id' => "wpse-{$post->ID}-aside",
'description' => "Aside widgets for page {$post->post_title}",
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
}
template_widgetsInit();
各ページに異なるページテンプレートがあり、それらの各ページテンプレートに異なるメニューがあるとは限りません。作成できるメニューの数には制限があると思いますが、これが最大の制限になります。
あなたはそれらを並べ替えることについて話していますか、それとも単にページごとに表示されているものを切り替えていますか?確実に分類法を追加して、各ウィジェットにその用語の存在をリッスンさせることができます(たとえば、sidebar.php)。
たとえば、登録された分類法は「Widget Presence」と呼ばれ、Widget 1、Widget 3、About Us Text、Foo Barなどの用語があります。
ページはそれが持っている用語を選択します。
サイドバーには、特定のページに含まれている用語を確認するための条件付きステートメントがいくつかあり、テンプレート部分や特定のウィジェット、または関連するコードのブロックを読み込むことができます。理にかなって?
もっと具体的なものを提供したいのであれば、もっと具体的な例を用意することができます。
私はこれらの同じニーズを持つWebサイトを構築しました。私は実際には単にプラグイン "ウィジェットロジック"を使用しています
http://wordpress.org/extend/plugins/widget-logic/
Wordpressのコンディショナルタグを受け取る各ウィジェットにテキストフィールドを作成します。それらを並べ替える必要がある場合、私は別々の場所で必要とされていたウィジェットを複数作成しました。それは速くて簡単な修正でした。
レオン