投稿IDやカテゴリIDから、投稿やカテゴリの情報を取得することは多いと思うのですが、今回はそのためのIDをスラッグから取得する方法について。

というのも先日、カテゴリスラッグからIDを取得する必要があり、調べてみると「スラッグからIDを取得する方法」は、投稿・固定ページ・カテゴリ・タグ・カスタムタクソノミーでそれぞれ方法が異っていて、なかなかややこしかったのです。

目次

投稿・固定ページ

投稿・固定ページの情報をスラッグ名から取得するには、 get_page_by_path()という関数が便利です。

get_page_by_path()を使う

使用形式

$page_data = get_page_by_path($page_path, $output, $post_type);

引数は3つ。それぞれの説明は以下。

引数 説明
$page_path スラッグ名(ページを示すパス)。子ページの場合「/」で親ページからのパスを指定する。
先頭・末尾の「/」はあってもなくても構わない。/
初期値 : なし
$output 戻り値の種類を指定。
初期値 : OBJECT
  • ARRAY_A : 連想配列
  • ARRAY_N : 配列
  • OBJECT : 投稿オブジェクト
$post_type 投稿タイプを指定。
初期値 : 'page'(固定ページ)

通常の投稿の場合は第3引数'post'を、 カスタム投稿タイプの場合はその投稿タイプ名を指定します。

この関数によって投稿オブジェクトが取得できるので、そこからIDを取得する。という流れです。

例:ページスラッグからIDを取得

//固定ページ
$page_data = get_page_by_path('parent_slug/child_slug');
$page_id = $page_data->ID;

//投稿
$post_data = get_page_by_path('slug_name', OBJECT, 'post');
$post_id = $post_data->ID;

*上記の 'parent_slug/child_slug' の部分は '/parent_slug/child_slug/' でも可。

get_posts()にスラッグを指定しても可

get_posts()という強力な関数があるので、こちらでも可能。

//固定ページ
$page_data = get_posts('name=sulg_name&post_type=page');
$page_id = $post_data[0]->ID;

//投稿
$post_data = get_posts('name=sulg_name');
$post_id = $post_data[0]->ID;

カテゴリ

次はカテゴリIDをスラッグ名から取得する方法です。二種類の関数があります。

get_cat_ID()を使う

get_cat_ID()という関数がすごく簡単です。

使用形式

$cat_id = get_cat_ID( $cat_name );

引数は1つだけ。スラッグ名を指定します。

指定したカテゴリが見つかればそのIDを、カテゴリが見つからない場合は0を返します。

また、 投稿がないカテゴリの場合も0が返ってきます

*ちなみに、タグ・カスタムタクソノミーには使用できませんでした。(0が返ってくる)

get_category_by_slug()

もう一つ、get_category_by_slug()という関数も使えます。

使用形式

$cat_obj = get_category_by_slug( $slug );

引数にはカテゴリスラッグ名を指定します。

WP_Termオブジェクトを取得できるので、そこからIDを取得することができます。

カテゴリがなければ、 false を返します。

また、こちらの関数の場合、 投稿数がなくても問題なくオブジェクトが取得できます。

例 :カテゴリスラッグからIDを取得

$cat_obj = get_category_by_slug( 'cat_slug ');
$cat_id = $cat_obj->term_id;  //$cat_obj->cat_IDでも同じ

タグ・カスタムタクソノミー

タグやカスタムタクソノミーの場合、カテゴリのような関数は用意されていないので get_tags()get_terms()を使用するか、 get_term_by()を使用します。

get_tags()またはget_terms()を使う

これら関数の詳細については以下の記事でまとめていますので、そちらを参照してください。

[WordPress]カテゴリー・タグ一覧表示!タクソノミーに登録している全ターム情報を取得する方法まとめ[WordPress]カテゴリー・タグ一覧表示!タクソノミーに登録している全ターム情報を取得する方法まとめ

例だけのせておきます。

//スラッグを指定するための配列
$args = array('slug' => 'slug_name');

//タグの場合
$tag_data = get_tags($args);
$tag_id = $tag_data[0]->term_id;

//カスタムタクソノミーの場合
$term_data = get_terms($args,'taxonomy_slug');
$term_id = $term_data[0]->term_id;

これらと同様の方法で、get_categories()を使用してカテゴリIDを取得することもできます。

get_term_by()

get_term_by()という関数を使用すれば、スラッグ名からカテゴリ・タグ・ターム情報を取得できるので、これを利用する方法もあります。

使用例

$term_data = get_term_by( $field, $value, $taxonomy, $output, $filter );

引数は5種類。

引数 説明
$field 何から情報を取得するか。'id', 'slug', 'name', または 'term_taxonomy_id'。
初期値 : 'id'
$value $fieldに応じてIDやスラッグ名を指定。
$taxonomy タクソノミー名を指定。'category'でカテゴリ。'post_tag'でタグ。
$output 返り値を何で取得するかを指定。指定できるのは OBJECT,ARRAY_A, ARRAY_N
初期値 : OBJECT
$filter フィルタを指定。
初期値 : 'raw' (フィルタなし)

今回の用途である、スラッグ名からIDを取得したい場合は以下の様に使用します。

//タグ
$tag_data = get_term_by('slug', 'slug_name', 'post_tag');
$tag_id = $tag_data->term_id;

//カスタムタクソノミー
$term_data = get_term_by('slug', 'slug_name', 'taxonomy_name');
$term_id = $term_data->term_id;

もちろん、カテゴリもこの関数を使用できます。

- Thank you for reading. -

コメント

コメントする