get_template_part( ‘loop’, ‘index’ ); が固定ページテンプレートにも書かれていればそこから当然に記事一覧を拾ってくると思っていた
これは誤りですね。
page.phpにindex.phpと同じ内容を記載すると、index.phpと同じマークアップ(レイアウト)で内容を出力するという結果になります。
方法は2つあります。
1.ダッシュボードの設定>表示設定>フロントページの表示
の項目で、「固定ページ (以下を選択) 」を選択
投稿ページ: [-選択-] 記事一覧を表示させたい固定ページ名(この場合はtest)を選択し「変更を保存」
2.query_postを使い、ループ部分をカスタマイズ
1.の方法で表示されるものでOKなのであれば、とくにページテンプレートを作成しなくでも良いです。
もうすこし凝った表示が必要なのであれば2.の方法をやる必要があります。
ちなみに、get_template_part( ‘loop’, ‘index’ ); の意味はお分かりですか?
これにより、2.の方法の説明の仕方がちょっと変わるので。。。
mypacecreatorさま
返信ありがとうございます。
コードを書いた(コピった)時にはその部分に関して何も考えもなく軽い気持ちでpage.phpに貼りつけたので全く理解出来ていません。
ひょっとしてテンプレート階層に基づく呼び出しのルールに関連して、差し当たりレイアウトは表示するものの、get_template_part( ‘loop’, ‘index’ ); のloopもindexも固定用ページテンプレートの階層には存在しないので仕方なくデフォルトのモノを表示している、、みたいな流れで発生したのでしょうか?
もし、index.phpに出力する記事一覧と同じものを固定ページに出そうとした場合、
①loop.phpの内容をpage-XXXX.phpとして保存
②固定ページで指定したテンプレートからget_template_part( ‘XXXX’, ‘page’ );
みたいな感じでしょうか?
経過を拝見する限り、基本のテンプレート階層に関する理解がもう少し必要かなと思いますね。
get_template_part( ‘loop’, ‘index’ ); のloopもindexも固定用ページテンプレートの階層には存在しないので仕方なくデフォルトのモノを表示している
①loop.phpの内容をpage-XXXX.phpとして保存
②固定ページで指定したテンプレートからget_template_part( ‘XXXX’, ‘page’ );
というのは、どちらもちがいますねー。
get_template_partはインクルードタグであり、
get_template_part( ‘loop’, ‘index’ )というタグがあった場合、
その部分は別ファイルであるloop-index.phpを読み出します。
なので固定ページ用のテンプレート階層とは、直接は関係しません。
たとえばpage.php内でget_template_part( ‘loop’, ‘page’ )を使うと、
その部分はloop-page.phpを読み出しますが、仮にloop-page.phpが存在しない場合はloop.phpを代わりに呼び出します。
参考:関数リファレンス/get template part
以上がget_template_partタグの説明ですが、「じゃあ今回のケースはどうしたらいいのか」というと、まだ情報が足りません。
順を追っていきましょう。
まず、今回の
固定ページのデフォルトテンプレート(page.php)を記事一覧が表示出来るよう修正
についてですが、
- 「記事一覧」というのは、新着の投稿一覧(カテゴリ制限なし)でよろしいでしょうか?
- 表示させたいのは何件ですか?
- ページ送りは必要ですか?それとも、5件なら5件表示させて終わりでよろしいですか?
- 新着投稿と別に、そのページの編集画面で登録した内容も出力したいですか?
- なぜ、固定ページでやりたいのでしょうか?通常の投稿一覧ではダメな理由があれば教えてください。【←これ大事】
これらの回答により、適する実装方法が変わってきます。
どういう結果にしたいのか、整理して教えてください。そうしていただけるとアドバイスしやすいと思います!
mypacecreatorさま
お手数をおかけして申し訳ございません。
なぜ、固定ページでやりたいのでしょうか?通常の投稿一覧ではダメな理由があれば教えてください。【←これ大事】
私が意図したのはWordPressの記事をあるカテゴリはブログ記事として、また別のカテゴリはコンテンツの一部品(例えばオンラインショップの商品のような扱い)として、それぞれ別個のデザイン、異なる記事のレイアウトで表示出来るのかな、と思って試してみた次第です。
固定ページだとページ属性にテンプレートを選択できますので固定ページに記事が表示出来れば柔軟に取り扱う事が出来るのかなと思いました。
1.記事一覧はカテゴリ制限されている必要があります。
2.表示件数は特に想定していませんが、テンプレートで直接指定出来る方が良いです。
3.ページ送りは必要です。
4.タイトル部分だけではなくmoreタグより上の部分の表示してほしいです。
基本的な知識の不足から見込みがまったく当てにならないので恥の上塗り覚悟ですが、
①、②はquery_postに対する引数で制御できるような気がします。
③はプラグインWP-PageNaviが使えるような気がしています。すんなりとは行かないでしょうが…
④はloop-index.phpの構造に依存すると思うので、現行のテンプレートの使用そのままで実現できると思っています。
※私が未だ理解出来ていないのは、index.php、固定ページとも最終的に同じファイルを読み込んでいるにも関わらず、異なる内容が出力される事です。
loop-index, loop-pageとも内容出力そのものに関わるコードは同一で、外部からの条件の与え方(クエリなど)で出力内容を変えている(固定ページならその内容を出力など)でしょうか?
query_postはその条件に対して変化を与える(介入する)ような関数と言う意味でしょうか?
私が意図したのはWordPressの記事をあるカテゴリはブログ記事として、また別のカテゴリはコンテンツの一部品(例えばオンラインショップの商品のような扱い)として、それぞれ別個のデザイン、異なる記事のレイアウトで表示出来るのかな、と思って試してみた次第です。
という理由であれば、固定ページにする必要は無いと思いますよ。
たとえばnewsというカテゴリの一覧ページでしたらcategory-news.phpを作っておけば自動でそちらが適用されます。
※私が未だ理解出来ていないのは、index.php、固定ページとも最終的に同じファイルを読み込んでいるにも関わらず、異なる内容が出力される事です。
loop-index, loop-pageとも内容出力そのものに関わるコードは同一で、外部からの条件の与え方(クエリなど)で出力内容を変えている(固定ページならその内容を出力など)でしょうか?
query_postはその条件に対して変化を与える(介入する)ような関数と言う意味でしょうか?
ちょっと言い回しが難しいので、こちらがちゃんと汲み取れているかどうか自信がありませんが…
同じファイルを読み込んだからといって同じ内容が出力されるわけではありません。
ポストタイプが投稿の場合は投稿に、固定ページの場合は固定ページに即した内容が出力されます。
投稿アーカイブページの場合はループして同じフォーマットの投稿がいくつも出力されますが、固定ページの場合はループは1回でおしまいです。
query_postsを使うのは、アーカイブでたとえば
「特定のカテゴリや投稿タイプの投稿のみを出したい」
「特定のタグの付いた記事のみ表示させたい」
「通常は新着順に表示させているが、ここでは古いものから順に表示させたい」
「付いたコメントの多い順に表示させたい」
などといったように、通常のループの処理をちょちょいと変更したい時に使います。
参考:
http://wpdocs.sourceforge.jp/テンプレート階層
http://wpdocs.sourceforge.jp/テンプレートタグ/query_posts