固定ページを取得したい時、ページ名が決まりきっているならget_page_by_title( $page_title )
を使うのが手っ取り早いです。( get_page( $page_ID )
はテスト環境・本番環境で制作してると両者でIDが違ったりするので使いづらい )
しかしながら、get_page_by_title()
もページ名で取得するので管理画面に入力された値に依存するハードコーディングな訳ですから管理画面からページのタイトルを変更されてしまうとエラーになる可能性がありるので、なんだかなー。です。
使っているテンプレートファイル名からページを取得する方法
1. get_pages() で取得する方法
<?php $pages = get_pages([ 'meta_key' => '_wp_page_template', 'meta_value' => '[page-template-file].php', ]); foreach($pages as $page){ echo "{$page->ID}: {$page->post_title}<br>"; } // 内部的に get_posts を呼んでいるようなのでメインクエリをリセット wp_reset_postdata();
2. WP_Query() で取得する方法
<?php $query = new WP_Query([ 'post_type' => 'page', 'meta_key' => '_wp_page_template', 'meta_value' => '[page-template-file].php', ]); if( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); $pageID = get_the_ID(); $pageTitle = get_the_title(); echo "{$pageID}: {$pageTitle}<br>"; } } // メインクエリをリセット wp_reset_postdata();
まぁ固定ページのテンプレート外でページのデータを使いたいなんて結構特殊ケースだと思いますが、
例えば特定のページテンプレートにカスタムフィールドなどを付けていて、固定ページのテンプレート外でこの値を取得したような場合はこの方法でページテンプレートのファイル名からページを取得することできました。
※ ページテンプレートが複数のページで使われている場合、該当する全てのページが取得されます
いつも書いてるケド、久々のWordPress!!
いわゆる受注のWEBサイト制作ってまだまだWordPressで〜ってのが多いですね。積極的に受注案件をしてないので忘れた頃にやってきて毎回なにかしらハマってる気がする…
[参考]
- Get page id by template - WordPress Development Stack Exchange
- テンプレートタグ/get posts - WordPress Codex 日本語版
- 関数リファレンス/WP Query - WordPress Codex 日本語版
- 関数リファレンス/wp reset postdata - WordPress Codex 日本語版
- get_page_by_title() | Function | WordPress Developer Resources
- 作者: 中田亨
- 出版社/メーカー: 秀和システム
- 発売日: 2017/03/10
- メディア: 単行本
- この商品を含むブログを見る