wordpressでスラッグからIDを取得するには
wordpressでスラッグから記事IDを取得する方法
今回はwpのカスタマイズ案件で地味に使用することが多い、記事スラッグや固定ページのスラッグからIDを取得する方法を紹介するぞ。
get_page_by_path()を使う
wordpressにはスラッグから記事IDを取得する関数が用意されている。
それがget_page_by_path()なのだ。
$page = get_page_by_path( $page_path, $output, $post_type );
引数には$page_path、$output、$post_typeの3つが用意されている。
$page_pathには取得したいスラッグを入力する。子ページの場合はスラッグを入れてparent-page/sub-pageのようにするのだぞ。
get_page_by_path()の使い方
スラッグさえ指定すれば取得できるが、デフォルトでは固定ページになっているので、記事やカスタムポストを取得したい場合は$post_typeも指定してやることを忘れてはならぬ。
//デフォルトでは固定ページ
$page_info = get_page_by_path('取得したいページのスラッグ');
$page_id = $page_info->ID;
//投稿やカスタムポストの場合
$post_data = get_page_by_path('取得したい記事のスラッグ', 'postやカスタムポストのスラッグ');
$post_id = $post_data->ID;
get_page_by_path()の使用例
パスからページIDを指定する方法は、固定ページやカスタムポスト使って情報の管理する場合に役に立つぞ。
例えば
- 特定のページのカスタムフィールドでバナーを一元管理
- トップページに表示させるピックアップ記事を特定のページのカスタムフィールドで管理
こういう運用する場合、ページのIDを取得する必要があるので、get_page_by_path()を使ってIDを取得するといいのである。
直接IDを指定するのではなく、スラッグからIDを取得するメリット
WordpressにはスラッグからIDを指定しなくても直接IDから記事情報を取得できる。なら直接IDから情報を取得すればいいのでは?と思うやつもおるかもしれぬな。
もちろんそれでも良い。ただしそれは本番環境1つで運用している場合だ!普通はローカル環境、テスト環境、本番環境といくつものサイトで運用される。
それぞれのデータベースまで完全に同期しているなら直接IDを取得すれば問題ないが、そうでなければどうしても記事IDはずれてしまう。
今回のようにスラッグで取得するようにしておけば、記事IDが異なっても同じスラッグの記事情報を取得できるので、トラブルが少なく済むぞ!
wordpressでスラッグからIDを取得する方法のまとめ
- wordpressでスラッグからIDを取得するにはget_page_by_path()を使う
- get_page_by_path()はデフォルトは固定ページなので、記事の場合は$post_typeの指定は忘れずに
- 複数の環境で運用している場合はID指定でなくスラッグ指定したほうが便利
以上だ!