WordPressのテンプレートを制作する際、特定の固定ページ(例:会社概要、利用規約など)のコンテンツを、他のページやカスタムテンプレート内に表示させたいことって多いんじゃないでしょうか。
「同じ情報を複数箇所で再利用したい」「コンテンツ管理の効率を高めたい」という時の必須のテクニックですので、今回はこの方法についての具体的なコードを解説します。
指定IDの固定ページコンテンツを取得・表示する基本形
WordPressでは、コンテンツを正しく「表示」するためにthe_content フィルターの適用が必須です。|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/ * ページID指定でコンテンツを取得し、正しく表示する基本コード */ $target_page_id = 4; // 取得したい固定ページのIDをここに設定します // 1. get_post()関数で投稿オブジェクト全体を取得する(get_page()の推奨版です) $post_object = get_post($target_page_id); // 2. 取得できたかどうかのチェック if ($post_object) : // 3. post_content(生のコンテンツ)を取得し、「the_content」フィルターを適用する // このフィルター処理がショートコードやwpautop(自動改行)を有効にします $page_content_filtered = apply_filters('the_content', $post_object->post_content); // 4. コンテンツを出力 echo $page_content_filtered; else : // ページIDが存在しない場合の代替メッセージ(安全策) echo '<p class="error-message">指定されたコンテンツID(' . esc_html($target_page_id) . ')は存在しませんでした。</p>'; endif; |
なぜ apply_filters が必要なのか
上記のコードで最も重要な要素はapply_filters('the_content', $post_object->post_content) の部分です。$post_object->post_content はデータベースに保存されている生のテキストデータに過ぎません。apply_filters('the_content', ...) の処理を経ることで、WordPressが自動で行っている以下の処理が実行されます。- ショートコードの展開:などの記述が画像ギャラリーに変換される。
- 自動段落追加(wpautop):エディターで改行した部分に p タグが適切に挿入される。
このフィルターを忘れると、コンテンツは「ただのテキストの塊」として表示され、デザインが台無しになってしまうんですね。
【応用編】コンテンツが存在しない場合の安全な処理(エラー回避策)
前述のコードには既にエラーハンドリングが含まれていますが、これはWebサイトの堅牢性(ロバストネス)を担保するために極めて重要です。ページIDの打ち間違いや、クライアントが誤ってその固定ページを削除してしまった場合、サイト全体が真っ白(PHPエラー)になる事態は絶対に避けたいでしょう。
ポイントは、
get_post()で取得したオブジェクトが、falseまたはnullでないかを確認すること。if ($post_object)というシンプルな検証手続きが、システムクラッシュを未然に防ぐ「守りの一手」になるんですね。【補足】コンテンツ以外の情報(タイトル、URLなど)の取得方法について
固定ページのコンテンツだけでなく、そのページのタイトルやURLなども同時に取得し、見出しとして利用したいケースも多々あると思います。その場合、先ほど取得した
$post_object を活用するか、関連関数を使用するのがスマートなやり方です。| 取得したい情報 | 2025年推奨の取得方法($target_page_id = 4 の場合) |
|---|---|
| ページタイトル | get_the_title($target_page_id) |
| パーマリンク/URL | get_permalink($target_page_id) |
| 抜粋(Excerpt) | $post_object->post_excerpt または get_the_excerpt($target_page_id) |
| スラッグ | $post_object->post_name |
これらの情報とコンテンツを組み合わせることで、汎用性の高いカスタムモジュールを構築することが可能になります。
例えば、特定のページへの誘導ブロックを全ページで再利用するときなどに、この手法は非常に役立ちますね。


コメント