広告

【WordPress】スラッグ名を使って投稿を参照(検索)する

アイキャッチ WordPress

あらかじめ決まった投稿からその内容を取り出すような場合、get_post()などの関数を使って投稿の情報(投稿オブジェクト)を取得し、その内容を参照することができます。

get_post($id, $output, $filter);

このget_post()関数は引数に投稿IDを使用するので、WordPress管理画面などからその投稿のIDを事前に確認し、コードに記述することで投稿オブジェクトを取得することが可能です。

以下は投稿IDが123の投稿からタイトルを表示するコードの例です。

$post_id = 123;
$target_post = get_post($post_id);
echo $target_post->post_title;

サーバー環境などによってIDが変わる場合に投稿を参照したい

前述のコードは、特定のWebサーバーですでに公開済みの投稿だけを参照するのであれば問題なく動きますが、これらのコードをテストサーバーなどでテストし、本番サーバーに公開するような場合、必ずしも投稿IDはテストと本番環境で同一ではない可能性があります。

投稿にかかわらず、あらゆるタクソノミーは保存、更新のタイミングでIDがカウントアップされていくため、このようなコードはあまり汎用性が無く、本番化の過程でミスを招く原因となります。

コンテンツを参照する場合、システムが自動的に割り振るIDではなく、ユーザーで値を指定できるスラッグなどをキーに投稿を参照することでより安全なコードを記述できます。

スラッグ名をつかって投稿やタクソノミーを参照(検索)する

スラッグ名を使って投稿やカテゴリなどのオブジェクトを取得するにはそれぞれの取得関数を使用します。

投稿(post)の場合

// 投稿のスラッグから投稿オブジェクトを取得
$page_id_detail = get_page_by_path('detail', OBJECT, 'post');

固定ページ(page)の場合

// 固定ページのスラッグから投稿オブジェクトを取得
$page_id_detail = get_page_by_path('detail', OBJECT, 'page');

get_page_by_pathの第3引数のデフォルト値は'page'のため、固定ページについては引数なしでも取得可能です。

// 固定ページのスラッグから投稿オブジェクトを取得(デフォルト引数)
$page_id_detail = get_page_by_path('detail');

カスタム投稿タイプ

カスタム投稿タイプの投稿オブジェクトを取得するには、get_page_by_path()の第3引数にカスタム投稿タイプの名前を指定します。

// カスタム投稿のスラッグから投稿オブジェクトを取得
$page_id_detail = get_page_by_path('detail', OBJECT, 'costom-type');

カテゴリ

// カテゴリのスラッグからオブジェクトを取得
$cat = get_category_by_slug('category-slug');

タグ

タグの場合get_tags関数やget_term_by関数などが使えます。

// タグのスラッグからオブジェクトを取得 その1
$tag = get_tags(array('slug' => 'tag-slug'));
// タグのスラッグからオブジェクトを取得 その2
$tag = get_term_by('slug', 'tag-slug', 'post_tag', OBJECT);

カスタムタクソノミー

カスタムタクソノミーの場合、get_term_by関数などが使えます。

// カスタムタクソノミーのスラッグからオブジェクトを取得
$taxonomy = get_term_by('slug', 'taxonomy-slug', 'costom-taxonomy-name', OBJECT);

コメント

タイトルとURLをコピーしました