web-dev-qa-db-ja.com

Register_sidebar()とget_sidebar()はどのように連携しますか?

免責事項: 私はWPに新しいブランドスパンキングです。

Starkers HTML 5フレームワークテーマ を使用しています。 functions.phpで私はこのコードを見ます:

function starkers_widgets_init() {

  // Area 1, located at the top of the sidebar.
  register_sidebar( array(
    'name' => __( 'Primary Widget Area', 'starkers' ),
    'id' => 'primary-widget-area',
    'description' => __( 'The primary widget area', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // Area 3, located in the footer. Empty by default.
  register_sidebar( array(
    'name' => __( 'First Footer Widget Area', 'starkers' ),
    'id' => 'first-footer-widget-area',
    'description' => __( 'The first footer widget area', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // ... more calls to register_sidebar() ... 
}

そしてfooter.phpで私はこのコードを見ます:

<?php get_sidebar( 'footer' ); ?>

get_sidebar()がその文字列引数をどのようにしてregister_sidebar()で定義されている適切なウィジェットを見つけるのかをどうやって知っているかわかりません。 functions.phpスニペットで私は上に投稿しました。 nameidおよびdescriptionプロパティを除いて、「フッター」についての言及はありません。しかし、get_sidebar()がこれらのプロパティの中で 'footer'を検索することは私には奇妙に思えるでしょう。

これは私が求めていることに意味がありますか?足りないものはありますか?

私が求めているのは、WPアーキテクチャについてもっと知りたいのですが - カスタムウィジェット領域を定義し、それを特定のページにレンダリングする方法を知りたいからです。

トンありがとう。

7
jessegavin

index.phpから get_sidebar() を呼び出すだけで、テーマファイルsidebar.phpがロードされます。

一方、 register_sidebar() は、テーマがサポートしている場合にプラグインなどが動的にsidebar.phpファイルにコンテンツを追加したいウィジェットに使用されます。

あなたの場合、あなたのテーマのディレクトリにsidebar-footer.phpというファイルがありますか?

9
john010117

私はget_sidebar()を気にすることはありません。代わりに私はdynamic_sidebar()を使います。これを次のように呼びます。

dynamic_sidebar('first-footer-widget-area');

そしてそれはサイドバー全体の面倒を見る。これ以上ファイルを含める必要はなく、雑然としたテーマフォルダもありません。私が5つの異なるサイドバーを使いたいのであれば、ファイルを追加するのではなく、functions.php内の追加の関数のみを追加します。

7
John P Bloch

get_sidebar('name')は、sidebar-name.phpという名前のサイドバーテンプレートを取得します。

Sidebar-name.php内には、サイドバー用のHTMLと、ウィジェットが移動する場所であるdynamic_sidebar('some-name-hopefully-the-same')への呼び出しがあります。

register_sidebar(array(name=>'some-name-hopefully-the-same', ...))はdynamic_sidebarが機能するためのものです。

ご覧のとおり、get_sidebar(templatename)はサイドバーテンプレートで使用するためのものです。あなたがそれらを必要としていない場合は、単にあなたのテーマから直接dynamic_sidebar(sidebarname)を呼び出すことができます。

4
Gerard ONeill

get_sidebar('footer')はアクティブなテーマからsidebar-footer.phpをロードしようとします。 Starkersはこのファイルを提供しています。 starkers/sidebar-footer.phpをチェックすると、状況は明らかになるはずです。

3