かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress ページを使用しているテンプレートから取得したい

固定ページを取得したい時、ページ名が決まりきっているなら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で〜ってのが多いですね。積極的に受注案件をしてないので忘れた頃にやってきて毎回なにかしらハマってる気がする…


[参考]

WordPressのツボとコツがゼッタイにわかる本

WordPressのツボとコツがゼッタイにわかる本