メニュー

WEBMEMOする。とあるクリエイターの個人的な備忘録。

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()

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

    例だけのせておきます。

    //スラッグを指定するための配列
    $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 this to the end. -

    コメントする

    CAPTCHA


    TOPへ Top