index.phpと、home.phpのアドレスが重複します。
-
先日、カスタム投稿ページのリンクが上手くいきませんという問題を解決していただいて、大変感謝しております。
その問題の解決後、また新たな問題が出てしまいましたので、質問させてください。ブログページ(index.php 投稿タイプです。)
とは別に
トップページ(home.php)
を作っています。
この場合、前回の問題同様、archive-index.php を同じように作らないといけないとは思うのですが、トップページのアドレスは、http://サイト名.com/
で、ブログページも同じアドレスで、http://サイト名.com/記事タイトル
となっており、ブログページ全文を引き出すアドレスがありません。
トップページのアドレスを変更するわけにはいけないので、index.phpのアドレスを(たとえばhttp://サイト名.com/blog
など)変えたり出来るものなのでしょうか?もし何かおわかりになる方がおられましたら、アドバイスをよろしくお願いします。
-
「アーカイブ」の説明が少し足りませんでしたね。WordPress で「アーカイブ」というのは、個々の投稿に付随した要素、つまり、日付やカテゴリ、タグや投稿者といったものをキーワードにして、同じキーワードを持つ投稿を集めたものを表す概念です。一言で言うと、ユニバーサルな集合に対する部分集合です。もちろん、集合の和や積を作ることもできて、「日付またはカテゴリ」、「タグかつ投稿者」といったものを作ることもできます。
このような事情から、全ての投稿を何らかの順序で表示するブログページは「アーカイブ」と呼ばれません。特別扱いをするのですね。だから、archive-index.php というテンプレートは存在しないのです(どんな名前のテンプレートであろうと作ることはできますが)。
さて、そこで、necco388 さんの場合ですが、
http://サイト名.com/
と
http://サイト名.com/記事タイトル
は、同じアドレスではありません(「スラッグ」と呼びます)。後の方は、単独の投稿が表示されているようですから、single.php か、それがなければ index.php が使われます。
necco388 さんのページ構成がどのようになっているか、いまいちわからないのですが、管理画面で、設定 >> 表示設定 とメニューをたどり、「フロントページの表示」の項目を確認してみてください。「固定ページ」が選択されていますか? また、「フロントページ」と「投稿ページ」はどのような設定になっていますか? ここで、「投稿ページ」というのが、ブログページのことです。
blog のような名前の固定ページを一つ作り(テンプレートは自由に選べます)、ここでそれを選択すると、そこがブログページとなります。現在のパーマリンク設定だと、たぶん、それが、
http://サイト名.com/blog/
ということになるはずです。
ところで、necco388 さん、Codex の「テンプレート階層」を読んでいませんね? これは、テーマを作ろうという人なら、全文を暗記するまで読む価値のある文書ですから、ぜひ読んでみてください。
kjmtshさん、また丁寧なアドバイスいただき、申し訳ない気持ちと感謝の気持ちが入り混じっております…。
今から、kjmtshさんの書いていただいたこと、Codex(はい…「テンプレート階層」をちゃんと詠んでいませんでした。見ているだけで目が泳いでしまって…)をじっくり読んで、どういうことか理解できるように頑張りたいと思います。それからまた書き込みさせていただきますね。
いつもどうもありがとうございます!あぁ、そういう意味ではないのです。「感謝される」のは嬉しいけれども、「申し訳なく」思う必要はありません。ここでは、質問であろうと、回答であろうと、投稿する人の間に「階層」はありませんので。それに、検索してここにたどり着く人にとっては、質問も回答も、ときには間違いでさえも、等しく役立つはずです。
ドキュメントは読んだ方がいいけれども、同時に実践をしなければ、たぶん理解できないはずです。だから、試しては読み、読んでは試すというのが一番よいのではないでしょうか。また、コードの変更にドキュメントが追随できていないところも多々あります。ドキュメントの通りにやったけれども、結果が違うという情報も役立ちます。ですから、それを読んで理解できなければ投稿できないなどと思う必要はありません。
ところで、表示設定はどうなっていましたか?
表示設定は、デフォルトの、「最新の投稿」にチェックが入ってるままでした。
私が作っているファイルはhome.php
index.php
header.php
sidebar.php
footer.php
single-information.php
archive-information.php
functions.php
あと固定ページをいくつか(固定ページ名.php)以上です。
先ほどCodexを見ていて、404.phpがないということに気づきました…。
いきなり自分で作るのではなく、まずなにかのテンプレートをカスタマイズからやらないといけなかったですね。それはともかく…テンプレート階層のページを見ていて、index.phpというのは、一番最終の階層で、他に呼び出すページがないときに表示されるものだったんですね。必要だけれど、必ずしもそのページでブログをやらなくてはいけないということではない、ということでしょうか。
呼び出す呪文(コード)のようなものはあるような気がしていましたが、優先順位があるとは知りませんでした。これは本当に実際にいろいろ試してみないと、わからなさそうですね。でも、そういうことがあって、それがとても大事だと教えていただいてよかったです。
ワールドプレス関係の記事をいろいろネットで見ていたとき、当然目にしていたと思うのですが、その時は意識していなかったので、なんとなく読み飛ばしていたんだと思います。本題に戻って、つまりブログのページを作りたいなら、index.phpで作ってもいいけれど、私のような場合は、
single-blog.php
などを別に作ればいいということですね。その場合、カテゴリーごとにarchive-カテゴリー名.php
を作らないと、カテゴリー別の記事一覧は読めないということでしょうか。今はindex.phpでブログを書いているので、カテゴリーごとの記事一覧は読めていますが、しくみが違う…んでしょうか。でも、それもちょっと時間があるときに自分で試してみます。一時は、もう無理だと思って、blogという親カテゴリーの中に、子カテゴリーを入れて、blogという親カテゴリーを表示するページのアドレスとして、
http://サイト名.com/blog/
そして、サイドバーには子カテゴリ名のみ表示する…という暴挙に出ていたんですが、やっぱりちゃんと作りたいので、single-blog.php
を作ろうと思います。私が申し訳ないと思うのは、私が質問していることは、たぶんここに書き込みされている方からしたら、常識的なことばかりではないかと思うからです。もっと自分で調べなさい、「テンプレート階層」は大事だから読んでいて当然、と思われるのでは、と。私も、今となっては、こんな大事なことをなんで知らなかったんだろう、いろいろ調べているようで、なにをしていたんだろう、と思います。
なんだか余計な話ばかり長々と、この貴重なフォーラムの場で使ってしまいました。
single-blog.php
を作って上手くカテゴリー分けなどが出来ましたら、またここに報告させていただきます。kjmtshさんには、貴重なお時間を割いていただいて適格なアドバイスをいただき、本当に感謝しています!
実際HPが出来たら見ていただきたいくらいです。necco388 さんの状況が少しわかりましたが… ひとつわからないことがあります。
トップページ
http://サイト名.com/
には、今、何が表示されているんでしょう? necco388 さんのいう「ブログページ」でないことはわかりますが、まったく想像がつきません。index.phpというのは、一番最終の階層で、他に呼び出すページがないときに表示される…
その通りです。ですから、最後の砦 index.php がないと、WordPress は「テーマが壊れている」と教えてくれます。実は、これらのファイル名が、テンプレートを呼び出す呪文にほかなりません。ここまでは、ちゃんと理解できいます。
single-blog.php などを別に作ればいい…
これは激しく間違えています(失礼)。single.php は、あくまで個別の投稿を一つ表示するためのものなので、投稿を全部表示するときには使われません。というか、WordPress の仕組みを誤解しています。
ブラウザからこのページをくれという要求があったときに、WordPress はアドレス=スラッグ(デフォルトでは”/?post_id=1″みたいな感じ、パーマリンクを設定していると”/投稿名/”のようになったりします)を見て、投稿を全部表示するのか、それとも、一つだけ表示するのかなどを判断します。それに応じて、データベースから必要な情報を取ってくるのですが、ここまではページが表示される前に行われてしまいます。そして、その後に、要求にふさわしいテンプレートが検索されます。
たとえば、カスタム投稿 book の 「一週間でマスターできるわけがないWordPress」という投稿を一つだけ表示するとすると、まず single-book.php を探し、存在しなければ single.php を探し、それも存在しなければ index.php を使って表示します。「テンプレート階層」の左から順番に探していき、どれも存在しなければ、最後は index.php を使うわけです。だから、テーマには必ず index.php が必要なのです。
ここで大切なのは、最初の要求で、全ての動作が決定してしまうということです。テンプレートが決定するわけではないので、single-blog.php を作っても相手にしてもらえません。necco388 さんの誤解は、ここにあります。WordPress は、テンプレートを作ったらそれが自動的に表示されるものではなくて、表示するための何かが存在するので、それに応じたテンプレートを利用しようとする、と考えてください。その「何か」が存在しない限り、テンプレートには出番がないのです。
WordPress にとって、意味のあるテンプレートファイル名は、
- template_name-イタリック体.php
- template_name-{…}.php
と記述してあるものだけです。single-blog.php というファイル名は、投稿タイプが blog の投稿を一つ表示するとき使ってください、という意味になります。もし、投稿タイプ blog が存在しなければ、使われるチャンスはめぐってきません。
カテゴリーごとに archive-カテゴリー名.php を作らないと、カテゴリー別の記事一覧は読めない…
ここまでの説明で、これも間違いだということがわかりますか? 正しくは、category-slug.php => category-id.php => category.php => archive.php => index.php と検索して、存在するものがあったら、そのテンプレートが使われます。これが「階層」の意味です。だから、カテゴリを表示するのに使われるためには、これらのどれかの名前を持っている必要があります。
さて、そこで、necco388 さんの、home.php が疑問です。現在の設定ならば、WordPress がこれを使うときには、すでにデータベースから「全ての投稿」を取得しているはずです。にもかかわらず、「ブログページ」になっていないとすると、home.php は何をやっているんだろう? と思うわけです。
テンプレートの基本は、
Stepping into Templates(テンプレート入門)(日本語版はリンクをたどってください)
を、テーマについての基本は、
を読んだ方がいいですね。これらも熟読してください。
kjmtshさん、いつもありがとうございます!
すみません、私のドングリ大の脳が火を噴き始めました…少し、修行の旅に出てまた戻りますので、よろしければまたお付き合いください。まだ旅の途中ですが、とりあえず、私のサイトをもう少し詳しく書いてみます。
カフェのホームページです。まず、日々更新するブログのページ。
index.php
のテンプレートを使って
そこにheader.php sidebar.php footer.php
を呼び出して、表示しています。
投稿は、デフォルトでついているものを使用しています。お店のお知らせのページです
single-information.php archive-information.php
カスタム投稿タイプです。
あと、いくつかの固定ページ。
それだけなら、
http://サイト名.com/
で、index.phpのテンプレート
つまり、ブログのページがトップに来ます。ですが、トップページは別のデザインで作りたかったので
(ブログやインフォメーションの新着記事、お店の写真をのせています)
home.php
というファイルを作りました。ですので、
http://サイト名.com/
を表示すると
home.php
(トップページ)が表示されているというわけです。そんなわけで、ブログ全文を表示するアドレスをどうすればいいのか、
わからない次第です。何度も同じことを書いてしまっている気がするので、まだまだ全然わかっていませんね…なさけないです。
何をやっているのか、わかりました。home.php にはループがないのですね。であれば、トップページ、ブログページ、ともに固定ページにするのはどうですか?
やり方は次のとおりです。
- 固定ページを1つ作る。タイトルは home、本文には何も入力せず、「ページ属性」タブで、テンプレートに home.php を指定する。スラッグは home。
- 固定ページをもう1つ作る。タイトルは blog、本文には何も入力せず、「ページ属性」タブで、テンプレートに「デフォルトテンプレート」を選択する。スラッグも blog とする。
- 「設定=>表示設定」に移り、「フロントページの表示」を「固定ページ」にして、「フロントページ」に home を、「投稿ページ」に blog を選択して、「変更を保存」ボタンをクリックする。
- 「外観=>メニュー」に移り、home と blog をメニューに追加する。
- サイトを表示して確認する。
たぶん、運が良ければ、
http://サイト名.com/
でトップページが、http://サイト名.com/blog/
でブログページができると思います。まだまだ全然わかっていませんね…なさけないです。
まあまあ、それじゃあ、楽しくないじゃないですか。わからないことは少しずつ覚えていけばいいのではありませんか?
お返事いただいてから、少し日にちがたってしまい、すみません。
先ほど、やってみました。homeの固定ページに続き、blog 固定ページを作り、テンプレートに「デフォルトテンプレート」、スラッグを blog にしました。
スラッグ!というものを、今知った次第です…わ~。
この時点で、 blog のページを確認しますと、デフォルトの blog のテンプレートは出ますが、すでにいくつか書いている投稿は全然表示されません。(あたりまえですか…)ですが、そこでめげずに「設定=>表示設定」で書いていただいているように設定しました。
この時点で、http://サイト名.com/blog/
では、先ほど作った blog の固定ページが表示されますが、「投稿ページ」に blog を選択すると、http://サイト名.com/
も、http://サイト名.com/blog/
も、どちらもhome.php
が表示されてしまいます。4、「外観=>メニュー」に移り、home と blog をメニューに追加する。
…ここがどこのことなのか、わかりません。
外観の中には、テーマ、カスタマイズ、テーマ編集しかないので…。やっぱり、デフォルトの投稿を使うのではなくて、カスタム投稿タイプで blog を作ったほうがいいでしょうか。
運が良ければ…という言葉に笑ってしまいました。
いつもアドバイス、ありがとうございます。外観の中には、テーマ、カスタマイズ、テーマ編集しかないので…。
作られているテーマがカスタムメニューに対応していません。
http://wpdocs.sourceforge.jp/Navigation_Menus
英語をがんばって読むか「カスタムメニュー」で検索してください—
この時点で、http://サイト名.com/blog/ では、先ほど作った blog の固定ページが表示されますが、「投稿ページ」に blog を選択すると、http://サイト名.com/ も、http://サイト名.com/blog/ も、どちらもhome.phpが表示されてしまいます。
テンプレートには適用される優先順位があります。
「フロントページの表示」を「固定ページ」にして、「フロントページ」に home を、「投稿ページ」に blog を選択
この場合において「フロントページ」(home)を独自のテンプレートにしたければ font-page.php を作成してください
—
WordPressは元々ブログなので「投稿の一覧」が存在しません。
(要は投稿一覧はホームで表示されたもの+そのページ送りです)ですので、HOMEとは別に「投稿の一覧」を用意したければ、「フロントページの表示」を固定ページにしたり、といった設定が必要です。
まずは闇雲にやるよりも、デフォルトテーマを「子テーマ」で改造してみたり、
既にある程度のphpファイルが揃っているスターターテーマ「_s」を利用してみてはどうでしょうか?
(とは言え混乱させるのも悪いのでリンクはしません。興味があれば検索してみてください)gatespaceさん、アドバイス、どうもありがとうございます。
そうですね、無謀にも、何も知らないで闇雲に始めてしまったのがいけなかったですね。いけないことはないかもしれないけれど、私には早すぎました。スターターテーマ「_s」を調べていたら、gatespaceさんのHPにたどりつきました。既成のテンプレート、もしくはオリジナル、しか知らなかったので、次にサイトを作るときは、こちらで試してみたいと思います。
どうもありがとうございます。kjmtshさんも、長い間丁寧なアドバイスをありがとうございました。
ああ、なるほど。そういうことですか… necco388 さんが、本当にスクラッチからテンプレートを作り始めた(!)というのがわかりましたが…で、今のサイトはどうなるのですか?
WordPress は、ユーザに「自由」を保証しますので、何をやってもかまいません。おおいに迷ってよいと思います。昔、ドイツの詩人が訳知り顔で言ったように、
思いがあれば迷うもの、それが人間だ。
kjmtshさん、いろいろ気にしてくださって感激です。
スクラッチ、というんですね。いえ、次にサイトを作るときは、試してみようと思っただけで、まだ作り始めてません…。今作っているサイトは、おかげさまで、ほぼ完成していて、ただ今試運転中です。
一応自分が目指していたことは出来ましたし、このスレッドの本題である、ブログのアドレスの件も、前に書いたように、親カテゴリーと子カテゴリーを使い分けて、見た目にはうまく…いっています。
なんとかそういう力技でない方法を知りたかったのですが、私には、まだ難しかったようですね。以前、自分のブログ用に、規制のテンプレートをカスタマイズしたことがありますが、今よりphpの存在はおろか、CSSのこともわからなかったこともあり、それこそ闇雲にあれこれやってたら偶然出来た、みたいな感じの連続で、どうしてそうなるのかもわからずでしたので、こういうのは楽しくないと思いました。
なので、自分ですべて制御して一から作ってみたいと思った次第です。そうですね、迷ったぶんだけ拾い物もありますし、無駄なものはなにひとつないですね。ただ、迷う前に、せめてテンプレート階層の存在ぐらいは、知っておいてもよかったんじゃないか…と。
いろいろどうもありがとうございました。
- トピック「index.phpと、home.phpのアドレスが重複します。」には新たに返信することはできません。