[WordPress] パスを元にページを取得するget_page_by_path()
スポンサーリンク
基本的な使い方
get_page_by_path()
はページ名(スラッグ)を元にページオブジェクトを取得するWordPress関数です。
ページ名が「nanashi」の固定ページを取得したい場合、以下のコードで可能になります。
$posts = get_page_by_path("nanashi");
注意したいのは、子ページの場合、ページ名だけを与えるのではなく、親ページのスラッグを含めたURL全体を指定しなければならない点です。私はこれに引っかかって大変な時間を無駄にしました…
親ページ「oya」の子ページである「ko」を探す場合はこのようになります。
$posts = get_page_by_path("oya/ko");
ページスラッグに日本語(マルチバイト文字)を使っている場合も、URLエンコードした文字列を与える必要はありません。ページスラッグが「名無し」の場合でも、以下のコードで作動します。
$posts = get_page_by_path("名無し");
第2引数・返り値の取得形式
返り値はデフォルトではオブジェクトです。第2引数で返り値の種類を指定すると連想配列やインデックス配列で取得することが可能となります。連想配列の場合、引数はARRAY_A
、インデックス配列の場合、ARRAY_N
が引数となります。初期値はOBJECT
です。これらの引数は定数ですので、クオートで囲む必要はありません。
$posts = get_page_by_path("nanashi", ARRAY_A);//返り値が連想配列に
第3引数・検索対象投稿タイプ
get_page_by_path()
はデフォルトでは固定ページが検索対象ですが、第3引数を指定することで、通常の投稿なども探索可能になります。ポストを指定したい場合、”post”とします。
$posts = get_page_by_path("nanashi", OBJECT, "post");//投稿ページを対象に検索
代替手段
不具合かどうか分からないのですが、期待通りに動作しない場合があるようです。このエントリを残しておこうと思ったのが、get_page_by_path()
を使っていて、予期しない動作で時間を浪費してしまったためです。Googleで「get_page_by_path()」を検索すると、サジェストに「get_page_by_path not working」が上位に出てきます。そこでget_page_by_path()が期待しない動きをするとの報告がいくつもあることが分かるのですが、原因はよく分かりませんでした。
そこで、WP_query()でページ情報の取得を行うことにしました。以下はスラッグ名「名無し」の固定ページをWP_queryで探す(手抜き)コードです。
$args = array( 'name'=>'名無し', 'posts_per_page'=>1, 'post_type'=>'page' ); $the_query = new WP_Query($args); if( !$the_query->have_posts() ) { //略 }
get_page_by_path()
がどうしてもうまく動かない場合はこちらを使うと良いかもしれません。
スポンサーリンク
WordPressカテゴリーの投稿
- [WordPress] 記事が更新された回数を取得する
- [WordPress] ダッシュボードのウィジェットを表示オプションを使わずに非表示化する
- [WordPress] 関連記事をカテゴリーに基づきアイキャッチ画像つきで表示
- [WordPress] バックアッププラグインの特徴と機能比較
- [WordPress] タグ版wp_list_categories
- [WordPress] have_comments()がFALSEを返しコメントが表示されない現象
- [WordPress] 個別記事ページでカテゴリーを表示するときの目的別の方法
- [PHP] 文字長がnバイト以下になるまで末尾の文字を1字づつカット
- [WordPress] wp_insert_post()でhtmlタグが除去されるのを防ぐ
- [WordPress] カテゴリー・タグ・カスタムタクソノミーを外部から登録・編集する