投稿IDが分からなくても、URLのスラッグ(post_name)さえ分かればページや投稿のデータを取得できます。この記事では get_page_by_path() を使った方法と、WP_Query を使った現代的な代替方法を解説します。
この記事でわかること
get_page_by_path()でページ・投稿をスラッグから取得するget_page_by_title()は既にWP6.2で非推奨WP_Queryを使った代替方法
ページをスラッグから取得する
get_page_by_path() にスラッグを渡すと、固定ページの WP_Post オブジェクトを取得できます。見つからない場合は null が返るため、必ずガードします。
PHP:スラッグから固定ページを取得
$slug = 'your-page-slug'; // 取得したいページのスラッグ
$page = get_page_by_path($slug);
if ($page) {
$page_id = $page->ID;
$page_title = esc_html($page->post_title);
$page_content = $page->post_content;
} else {
echo 'ページが見つかりませんでした。';
}
投稿をスラッグから取得する
第3引数に 'post' を指定すると、投稿(通常の記事)も同じ関数で取得できます。
PHP:スラッグから投稿を取得
$slug = 'your-post-slug'; // 取得したい投稿のスラッグ
$post = get_page_by_path($slug, OBJECT, 'post');
if ($post) {
$post_id = $post->ID;
$post_title = esc_html($post->post_title);
$post_content = $post->post_content;
} else {
echo '投稿が見つかりませんでした。';
}
取得した投稿IDを使って本文や日付などをさらに取得する方法は投稿IDを取得するさまざまな方法にまとめています。逆に「投稿からスラッグを取り出したい」場合は投稿のスラッグを取得する方法を参照してください。
get_page_by_title() は使わない(WP6.2で非推奨)
get_page_by_title() は公式に非推奨
タイトルで検索する
タイトルで検索する
get_page_by_title() は、WordPress 6.2で正式に非推奨となり、呼び出すと非推奨警告(_deprecated_function())が発生します。公式ドキュメントは代わりに WP_Query の利用を案内しています。そもそもスラッグは一意(タイトルは重複しうる)なので、スラッグでの検索の方が確実でもあります。get_page_by_path() 自体は現行のWordPressでも非推奨ではありませんが、より柔軟に条件を組み合わせたい場合は WP_Query が便利です。スラッグは name パラメータで指定します。
PHP:WP_Queryでスラッグから投稿を取得する
$query = new WP_Query(array(
'name' => 'your-post-slug', // スラッグを指定
'post_type' => 'post',
'posts_per_page' => 1,
));
if ($query->have_posts()) {
$query->the_post();
$post_title = esc_html(get_the_title());
wp_reset_postdata();
}
使い分けの目安
単純に「このスラッグの1件」を取りたいだけなら
単純に「このスラッグの1件」を取りたいだけなら
get_page_by_path() で十分です。カテゴリーや投稿タイプなど他の条件も組み合わせたい場合や、複数件を絞り込みたい場合は WP_Query を使いましょう。よくある質問(FAQ)
Qget_page_by_path() は非推奨ですか?
A
get_page_by_path() 自体は非推奨ではありません。非推奨なのは似た名前の get_page_by_title()(WordPress 6.2で非推奨・WP_Query の利用が案内されています)です。2つを混同しないよう注意してください。Q存在しないスラッグを渡すとどうなりますか?
A
null が返ります。$page = get_page_by_path('slug'); if ($page) { $content = $page->post_content; } のように、必ず戻り値をチェックしてから使用してください。Q固定ページのスラッグに勝手に「-2」が付いてしまいます。
A同じスラッグ(またはURLとして競合するスラッグ)の投稿・固定ページが既に存在すると、WordPressが自動で連番を付けて重複を避けます。詳しい原因と対処は固定ページのスラッグに自動的に”-2″が追加される問題の解決方法を参照してください。
まとめ
- 基本:
get_page_by_path($slug)(ページ)/get_page_by_path($slug, OBJECT, 'post')(投稿) - 必須:戻り値は
nullの可能性があるため必ずガードする - 避ける:
get_page_by_title()(WP6.2で非推奨) - 柔軟に:条件を組み合わせるなら
WP_Query(nameパラメータ)
スラッグは一意なので検索の起点として確実です。非推奨関数を避けつつ、用途に応じて get_page_by_path() と WP_Query を使い分けましょう。
