cozy-kojiさん、こんにちは。
ウィジェットのエリアを設けるのであれば
- functions.phpに register_sidebar(ウィジェットエリアの登録)
- テーマファイルのウィジェットを表示したい場所に、dynamic sidebar(ウィジェットエリアの表示。記述するファイルは関係ない)
です。
まずは、Twenty Tenのfunctions.phpとsidebar.phpに該当する記述がありますので、コピーするところからはじめて、表示されたらCODEXを見ながら自分のテーマにあわせてパラメータを変えていくのがいいのではないでしょうか。
ご教示の通りやってみました。
①;twentyten のfunctions.phpとsidebar.phpをコピー
②;functions.phpの function twentyten_widgets_init() { の register_sidebar( array( で登録
nameはウィジェットエリア1で登録。
(私のブログではSidebarは1つです)
ここで操作の外観のウィジェットが対応され他に、メニュー、背景、ヘッダーが追加されました。
おっしゃってる
1.functions.phpに register_sidebar(ウィジェットエリアの登録)はできました。
さてこれを sidebar.php にどう対応させたら良いのかが分かりません。
具体的には2カラムで左をサイドバーにしています。
現在のindex.phpにある div=sidebar の中身はどのように記述し
sidebar.phpはどのように記述すれば良いのか見当が付きません。
もしよろしければヒントだけでもお願いできませんでしょうか。
cozy-kojiさん、こんにちは。
えーと、functions.phpとsidebar.phpは、ファイルごとコピーするのではなくて、必要な記述のみコピーすればよいです。
まあ、不具合がなければそれでもいいのですが。。
話が、sidebar.phpを切り分ける話とウィジェットを表示する話が混ざってしまっています。関数の名称は、register_sidebarですが、なにもsidebar.phpに記述しなければならない必要はまったくありません。
まず、ウィジェットの表示についてですが、index.phpの div=sidebar(id=”sidebar”ですか?)直下に
<?php dynamic_sidebar( 'xxxxxxx' ); ?>
を追加してください。xxxxxxxは、記述したregister_sidebarのidにします。
これで、ウィジェットが表示されるので、あとは、htmlのマークアップがvalidになるよう調整してください。
ウィジェットエリアにウィジェットの登録がなされていない場合に、デフォルトのコードを表示させるには、
<?php if ( ! dynamic_sidebar( 'xxxxxxx' ) ) : ?>
デフォルトで表示するコード
<?php endif; ?>
になります。
sidebar.phpを切り分ける方法は、
div=sidebar のブロックをそのままコピーして、sidebar.phpに記述。(Twenty tenのコードは入れないでくださいね。)
index.phpからは、div=sidebar のブロックを削除して、替わりに
<?php get_sidebar(); ?>
を記述すれば、ファイルの切り分けができます。
header.phpやfooter.phpなども同様の方法で切り分けができますので、Twenty Tenなど既存のテーマを研究して試してみて下さい。
jim912さん ご丁寧にありがとうございます。m_ _m
お陰様で無事sidebar切り離しもでき、ウィジェットも作動致しました!
一点お聞きしたいことがあります。
このget_sidebarとregister_sidebarとdynamic_sidebarの関係を理解できていません。
勉強のためにお聞かせ願えるとありがたいです。
get_sidebar はサイドバーを出力したいところに書きます。
サイドバーの内容は sidebar.php に書いておきます。
dynamic_sidebar はウィジェットを register_sidebar の定義に従って出力します。
■Codex: get_sidebar
現在のテーマディレクトリの sidebar.php テンプレートファイルを読み込みます。
■Codex: register_sidebar
「こんな感じのサイドバーを使うよ!」ってのを定義します。
■Codex: dynamic_sidebar
ウィジェットが設定されていればそれらを出力します。
ウィジェットが設定されていなければ、false が返ってくるのでデフォルトで表示するコードを書いてあげます。
kzさんありがとうございます。
何となくですが雰囲気程度は分かりました。
Codexで勉強したいと思います。
いつもありがとうございます。