成果物をまとめて確認する
[成果物]複数の固定ページを作成してページ間を移動しよう! – WordPress関数とURLの仕組み
【複数の固定ページを作成してページ間を移動しよう! – WordPress関数とURLの仕組み】の成果物です。投稿の学びを終えた時点の構成を一覧でご確認いただけます。
前回の記事で、WordPress関数を使って固定ページのタイトルと本文を表示することができるようになりました。
しかし、まだ1つのページしか作成していない状態です。
今回は、実際のWebサイトらしく複数の固定ページを作成し、ページ間を自由に移動できるナビゲーションを作成していきます!
その過程で、WordPressのURL構造やリンクの仕組みも学習していきます。
今回の目標
目次
現在「ようこそ」のみが存在している状態ですが、実際のWebサイトには複数のページが必要です。
企業サイトでよく使われるページを作成してみましょう。
固定ページを作成しましたが、これらのページにアクセスするためのURL(スラッグ)を適切に設定する必要があります。
https://example.com
about
https://example.com/about
複数のページを作成したので、ページ間を移動できるナビゲーションメニューを作成しましょう。
まずは、HTMLで直接リンクを書く方法から始めます。
変更箇所 sample-themeフォルダ内のindex.phpファイルの<header>
部分を変更します。
変更前:
<header>
<h1<?php the_title(); ?></h1>
<header>
PHP変更後:
<header>
<h1<?php the_title(); ?></h1>
<ul>
<li><a href="./">トップ</a><li>
<li><a href="./about">会社概要</a><li>
<li><a href="./service">サービス</a><li>
<li><a href="./contact">問い合わせ</a><li>
</ul>
<header>
PHP成功! これで、すべてのページ間を自由に移動できるようになりました。
Webサイトではページを階層化することがよくあります。
例えば、「会社概要」の下に「沿革」や「アクセス」などの詳細ページを作成する場合です。
早速、子ページを作ってみましょう。
ナビゲーションメニューに子ページのリンクも追加しましょう。
変更後のナビゲーション:
<header>
<h1<?php the_title(); ?></h1>
<ul>
<li><a href="./">トップ</a><li>
<li><a href="./about">会社概要</a>
<ul>
<li><a href="./about/history">沿革</a><li>
<li><a href="./about/access">アクセス</a><li>
</ul>
<li><a href="./service">サービス</a><li>
<li><a href="./contact">問い合わせ</a><li>
</ul>
<header>
PHP子ページを追加したナビゲーションを試してみると、ある問題が発生することがわかります。
現在表示中のURL+クリックした相対リンク=https://sample.local/about/history
/about/history
この問題の原因は相対リンクにあります。
相対リンク /about/history は、現在のページのURLに対して相対的に解釈されるため、意図しないURLになってしまいます。
そのため、WordPressは「どのページを表示してよいかわかならい」状態に陥ります。結果として最新の投稿が表示されたのです。
(内部的には404 not foundエラーが発生しています)
<a href="./about">会社概要</a>
PHP具体的な問題パターン
WordPressには、相対リンクと絶対リンクの欠点を補うための関数が用意されています。
WordPressには、この問題を解決するための専用関数が用意されています。
home_url()
関数を使用することで、常に正しいURLを生成できます。
<?php echo home_url('スラッグ'); ?>
PHP<?php echo home_url('about'); ?>
// 出力結果:https://example.com/about
<?php echo home_url('about/history'); ?>
// 出力結果:https://example.com/about/history
PHPindex.phpファイルの最終修正 home_url()
関数を使用してナビゲーションを修正します。
修正後のコード:
<header>
<h1><?php the_title(); ?></h1>
<ul>
<li><a href="<?php echo home_url(''); ?>">トップ</a></li>
<li><a href="<?php echo home_url('about'); ?>">会社概要</a>
<ul>
<li><a href="<?php echo home_url('about/history'); ?>">沿革</a></li>
<li><a href="<?php echo home_url('about/access'); ?>">アクセス</a></li>
</ul>
</li>
<li><a href="<?php echo home_url('service'); ?>">サービス</a></li>
<li><a href="<?php echo home_url('contact'); ?>">問い合わせ</a></li>
</ul>
</header>
PHP<?php echo 関数名(); ?>
の形式で使用<!-- 間違った書き方 -->
<a href="<?php home_url('about'); ?>">
// 出力結果:<a href="">
<!-- 正しい書き方 -->
<a href="<?php echo home_url('about'); ?>">
// 出力結果:<a href="https://example.com/about">
PHPhome_url()
関数は値を返すだけで、自動的には出力されません。echo
を使って明示的に出力する必要があります。
1. 環境に依存しない
2. 保守性が高い
3. エラーの防止
home_url()
関数による正しいURL生成echo
文を使った関数の出力方法トップページ(ようこそページ)
├── 会社概要
│ ├── 沿革
│ └── アクセス
├── サービス
└── 問い合わせ
XMLthe_title()
:ページタイトルの表示the_content()
:ページ本文の表示home_url()
:正しいURLの生成現在は、すべてのページが同じindex.phpファイルで表示されているため、同じデザインになっています。
次回は、ページごとに異なるデザインやレイアウトを適用する方法を学習します!
現在はすべてのページが同じ見た目ですが、実際のWebサイトでは以下が求められます。
お疲れさまでした! 複数ページのWebサイトが完成し、WordPressのURL管理システムについても深く理解できたのではないでしょうか。
相対リンクの問題に直面し、WordPress関数で解決するという実践的な経験も積むことができました。
次回はいよいよページごとの個性的なデザイン作成に挑戦しましょう!
この記事で作成した成果物は、以下のページでまとめて確認することができます。
WordPressの管理画面で作成した固定ページの内容を、オリジナルテーマ上に正しく表示するにはどうすればよいのか。 WordPressテーマ開発の基本から紐解きます。PHPの書き方と関数の使い方を丁寧に押さえながら、管理画面のコンテンツを正しく表示させる仕組みに迫ります。はじめての「動くテーマ」づくりの第一歩に最適な内容です。
固定ページ一覧の管理を効率化するために、Admin Columnsプラグインを導入し、「スラッグ」や「順序」を一覧に表示する方法を解説します。プラグインの基本概念から導入手順、実践的な順序設定テクニックまでを丁寧に紹介し、効率的なページ管理を実現します。
WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。
学習ストーリー第40話まで掲載中