メニュー

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

WordPressでは特定のページまでのパーマリンク・URLを取得するためのテンプレートタグがいくつかあります。

でも同じようなのが多くてややこしい。なので、よく見る関数たちを簡単にまとめます。

このメモは以下の記事の延長線上の話になります。

上記の記事では、URLだけでなく固定ページ・投稿ページの各種さまざまな情報を取得するための方法をまとめてますので是非参考にしてみてください。

目次

    投稿・固定ページへのリンクを取得

    まずは、投稿ページや固定ページなど、通常のページへのリンクを取得する関数についてです。

    全く同じ内容の関数が二つあります。

    • get_permalink()
    • get_the_permalink() 

    これらはどちらも同じ機能を持った関数です。

    get_permalink()

    http://~ からのURL全体を取得できます。

    基本的に、ページへのリンクに用いるならこの関数を使用すればいいと思います。

    [使用形式]

    get_permalink( $id, $leavename )

    引数は2つあります。それぞれの引数の説明は以下の表をご覧ください。

    引数 説明
    $id 投稿または固定ページの整数型の ID、あるいは投稿オブジェクト
    初期値: 現在の投稿ID
    $leavename 投稿名あるいは固定ページ名(%postname%)を保持するかどうか。trueの場合、実際の URI ではなく構造的なリンクを返します。初期値はfalse
    例: http://www.example.com/%postname%

    おそらく第二引数はほとんど使うことなはないかと思いますので覚えなくても大丈夫かと。

    get_the_permalink() 

    get_the_permalink()get_permalink() を呼び出しているだけの関数で、両者はエイリアス(同じ)関数です。

    引数の種類や使用方法get_permalink()と全く同じです。

    post_permalink()は非推奨

    「post_permalink() 」も同じ機能をもった関数ですが、バージョン 4.4.0 から非推奨になっているので注意です。

    $postやget_post関数の’guid’キーで取得

    グローバル変数$post や、get_post() を使用して取得できる投稿オブジェクトの中にも、URLの情報が保存されています。

    以下のように、’guid‘ というキーで取得できます。

    $post ->guid
    get_post()-> guid

     しかし、この方法で取得できるURLはget_permalink() などで取得できるURLとは形式が違うので少し注意が必要かもしれません。

    get_permalink()などで取得できるのは、Wordpressのパーマリンク設定で設定した形式でのURLですが、guidで取得できるのは

    ドメイン/?post_id=15

    のような、WordPressが実際にアクセスしているURLの形式です。たしか。笑

    実際に表示されているURL(get_permalink() などで取得できるURL)にアクセスした時、WordPressでは上記のURLへ読み替えてページを表示しています。

    WordPress用のURL人に見せる用のURLかの違い、だけだと思うので、こちらでも問題はないと思います。

    問題なくリンク先へもアクセスできます。

    ただ、’guid’でURLを取得することを推奨しているサイトは見かけなかったので、使用しないほうが無難かもしれません。

    投稿・固定ページへのリンクを出力

    get_permalink() などはURLの取得をしてくれる関数でしたが、出力までしてくれる関数もあります。

    the_permalink()

    the_permalink()を使用すると、get_permalink() で取得できる形式のURLを、出力してくれます。

    [使用形式]

    the_permalink( $post );

    引数はひとつです。

    投稿・固定ID」もしくは「投稿オブジェクト」を指定します。

    投稿ページ専用・固定ページ専用の関数もあるみたい

    投稿ページのURLを取得するための関数、固定ページのURLを取得するための関数というのも用意されています。

    が、これらを使うのであれば冒頭の get_permalink() で十分だと個人的には思っているので、説明は軽く…。

    get_post_permalink() – 投稿ページ用

    get_post_permalink( $id, $leavename, $sample );

    第二引数や第三引数はほぼほぼ使わないと思うので割愛します。

    get_post_permalink() をecho すると 以下の様な形式のURLが出力されました。

    http://wemo.tech/?post_type=post&p=1234

    get_page_link() – 固定ページ用

    get_page_link( $id, $leavename, $sample );

    先ほどと同じく、引数に関しては割愛。

    以下の様な形式のURLが出力されました。

    http://wemo.tech/test_page

    比較

    前者は取得できるURLが少し特殊な形式?っぽいです。$post->guidと似た様な形ですね。

    また、それぞれ投稿ページ用、固定ページ用とはなっていますが、どちらの関数も投稿・固定ページの両方で問題なく動作しました。謎です…。

    ドメイン以降のスラッグ部分を取得

    これまでのURLとは少し違った形式で、URLのドメイン以降のスラッグ部分を取得するための関数も用意されているようなので、メモしておきます。

    get_page_uri()

    「url」ではなく、「uri」であることに注意してください。

    [使用形式]

    get_page_uri( $page_id );

    引数は一つです。

    固定ページの「ID」または「投稿オブジェクト」を指定します。

    例えば、子ページを取得すると「親ページのスラッグ名/子ページのスラッグ名」で値が返されます。

    Codex日本語版 の説明を見ると、

    固定ページの ID から、その固定ページの URI を作って返します。親の固定ページがある場合、フルパスにするため親の URI が前に入ります。例えば第 3 階層の固定ページなら次のような URI を返します:top-level-page/sub-page/current-page

    と説明されています。。URLではなく、「URIを返す」と書かれています。

    URLとURIの違いについてはこことか見ると分かりやすかった

    上記のサイトを見たところ、URLとURIが別物だということはわかったのですが、WordPressでのURLやらURIやらパーマリンクとやらの呼び分け方が個人的にはしっくりきません…。

    ひとまず、「WordPressでスラッグと呼ばれている部分」を取得するものかなと、個人的に解釈しました。

    改めて説明すると、

    第一階層目のページならば、ただの「ページスラッグ」、

    第二階層の子ページなら、「親スラッグ/子スラッグ」 が取得できます。

    *返される値の冒頭には / が付かないことに注意が必要です。

    添付ファイル(メディア)のURLを取得

    固定・投稿ページではなく、添付ファイル(メディア)のURLを取得する関数です。(post_typeがattachmentのやつ)

    get_attachment_link()

    [使用形式]

    get_attachment_link( $attachment_id );

    引数は「添付ファイル(メディア)の ID」の一つだけです。

     

    カテゴリ・タグ・アーカイブページへのリンクを取得

    次は、カテゴリアーカイブページへのリンクを取得する関数についてまとめていきます。

    カテゴリ・タグ・タクソノミーでそれぞれ似た名前の関数が用意されています。

    • get_category_link()
    • get_tag_link()
    • get_term_link()

    の3つです。これらの関数はそこまで複雑ではないので、同時にまとめていこうと思います。

    [使用形式]

     get_category_link( $category_id );
    get_tag_link( $tag_id );
    get_term_link( $term, $taxonomy );

    引数はget_term_link() だけ2つあります。それぞれの引数の説明は以下の通りです。

    引数

    説明
    $category_id
    $tag_id
    リンクを取得したいカテゴリ・タグ・タームのID。必須。
    初期値: なし
    $term リンクを取得したいタームのID / スラッグ / オブジェクト。必須。
    初期値: なし
    $taxonomy タクソノミーのスラッグ。$term がオブジェクトのときは省略可。
    初期値: なし

    第一引数はどのタームの情報が欲しいかをIDなどで指定します。

    また、get_term_link() は、引数が2つあり、第二引数$taxonomyにタクソノミーのスラッグを指定します。

    カスタムタクソノミーであればそのスラッグを指定します。”category“を指定すればカテゴリ、”post_tag“を指定すればタグのアーカイブページへのリンクを取得できます。

    この第二引数$taxonomyは、第一引数の$termをオブジェクトで指定している場合は省略可能です。(オブジェクトの中にはタクソノミーのスラッグに関する情報も格納されているため)

    それぞれの記述例 :

    //カテゴリID 10,でカテゴリスラッグ'code'の アーカイブリンクを取得
    $cat_link = get_category_link( 10 );
    $cat_link = get_category_link( 'code' );
    
    //タグID 20, タグスラッグ 'wordpress' のアーカイブリンクを取得
    $tag_link = get_tag_link( 20 );
    $tag_link = get_tag_link( 'wordpress' );
    
    //'language'というタクソノミーの、タームID 30,スラッグ'html'のアーカイブリンクを取得
    $term_link = get_term_link( 30, 'language' );
    $term_link = get_term_link( 'html', 'language' );
    //もしくは、
    $term_html = get_term( 30 );
    $term_link = get_term_link( $term_html );
    
    

    以上のようにして使用します。

    *カテゴリ・タグ・タクソノミー様に関数が分かれていますが、一応どの関数も三種類全てに対応しているようです。実際にリンクは問題なく取得できました。

    その他

    その他にもURL・パーマリンク系の関数があれば追記していきます。

    アーカイブ系

    • get_year_link(2017);
    • get_month_link(2017 , 5);
    • get_day_link(2017 , 7 , 1);
    • get_category_link( カテゴリID )
    • get_tag_link( タグID )
    • get_term_link( タームID, ‘タクソノミー名’ )
    - Thank you for reading this to the end. -

    コメントする

    CAPTCHA


    TOPへ Top