Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8151

WordPress ページのURLを取得したい - かもメモ

$
0
0

WordPressのカスタムテーマで web サイトを作ってたらちょいちょい発生するやつ。
最終的に get_permalink($postID)で URL を取得するのだが、特定のページの post id を取得する方法を忘れるのでメモ

1. ページのタイトルから取得する

get_page_by_title は WordPress 6.2.0 から非推奨になっている

前まではこれでOKだった

<?php$page= get_page_by_title('PAGE TITLE');
get_permalink($page->ID);

get_page_by_titleで Warning が出るようになっていた

This function has been deprecated. Use WP_Query instead.
Deprecated: 関数 get_page_by_title は、バージョン 6.2.0 から非推奨になりました ! 代わりに WP_Query を使用してください。

WP_Query を使ってタイトルからページを取得する

毎回 WP_Queryを書くのは面倒なので関数化しておく

<?phpfunction get_my_page_by_title($title){$query=new WP_Query(['post_type'=>'page',
    'title'=>$title,
    'posts_per_page'=>1,
    'no_found_rows'=>true,
    'ignore_sticky_posts'=>true,
    'update_post_term_cache'=>false,
    'update_post_meta_cache'=>false,
  ]);
  wp_reset_postdata();

  $page=$query->post;
  if(empty($page)){returnnull;
  }return$page;
}

作成した関数を使ってページタイトルからページオブジェクトを取得できるようになった

<?php$page= get_my_page_by_title('PAGE TITLE');
get_permalink($page->ID);

しかし、ページのタイトルは管理画面から変更できるので運用者が変更してしまうと壊れてしまう問題がある

2. ページテンプレートからページを取得する

カスタムテーマを使うようなケースだと、動的に URL を取得したいページにはそれ用のテンプレートを作ることが殆どだと思うので、ページのテンプレートからページが取得できればタイトルが変更されても問題なく動作させることができる

get_pagesを使えばテンプレートからページ ($post) が取得できる

<?phpfunction get_my_page_by_template($template){$pageID=null;
  $pages= get_pages(['meta_key'=>'_wp_page_template',
    'meta_value'=>$template,
    'number'=>1, // 1件のみ取得する]);
  foreach($pagesas$post){$page=$post;
  }
  wp_reset_postdata();

  return$page;
}$page= get_my_page_by_template('templates/page-my_page.php');

⚠ 渡すテンプレート名は .phpまで含んだ文字列でないと意図したとおりに動作しないので注意が必要

テンプレートも管理画面から変更できてしまうが、タイトルよりは事故率が少ないと思う

ページの URL を取得する処理をまとめる

  1. タイトルから $page オブジェクトの取得を試みる
  2. テンプレート名から $page オブジェクトの取得を試みる
<?phpfunction get_my_page_url($title, $template){$page= get_my_page_by_title($title);

  if(empty($page)){$page= get_my_page_by_template($template);
  }if(empty($page)){returnnull;
  }$pageURL= get_permalink($page->ID);
  return$pageURL;
}

よし!

WordPressホント忘れたことに触る必要が出てきて毎回全部忘れてるからマジで困る
色々メモに残しておきたいことが溜まってるので、今の案件きりが付いたらまとめて書きたい


[参考]

つばな先生の誰何おもしろいです!

Viewing all articles
Browse latest Browse all 8151

Trending Articles