get_page_by_pathの第3引数にはarrayを使う
固定ページの情報を取得したくて「get_page_by_path」関数をよく使用するのですが、クエリを眺めていて少し気になった点。
Codexではget_page_by_pathの第3引数の初期値は「page」になっていると説明。
$post_type
(文字列 または array) (オプション) 投稿タイプまたは投稿タイプの配列。
初期値: 'page'
・'page' - 固定ページ
でも何も考えずに固定ページの投稿オブジェクトを取得するだけだから〜と第2、第3引数を省略してしまうと・・・
// 実行コード get_page_by_path('page_path'); // 実行クエリ SELECT ID, post_name, post_parent, post_type FROM wp_posts WHERE post_name IN ('page_path') AND post_type IN ('page','attachment')
なぜか、検索条件のpost_typeにattachment(画像)が含まれてしまう。
そこで該当部分のコアを眺めてみると、
if ( is_array( $post_type ) ) { $post_types = $post_type; } else { $post_types = array( $post_type, 'attachment' ); }
どうやら第3引数がarrayでない限りattachmentを含めてしまう模様。
ということで改めて第2、第3引数を指定してみると・・・
// 実行コード get_page_by_path('page_path', OBJECT, array('page')); // 実行クエリ SELECT ID, post_name, post_parent, post_type FROM wp_posts WHERE post_name IN ('page_path') AND post_type IN ('page')
無事、固定ページだけを対象にSELECTされるようになりました。
思わぬトラブルを避けるためにぜひとも第3引数はarrayで指定することをお勧めします。