WordPressでは特定のページまでのパーマリンク・URLを取得するためのテンプレートタグが複数あってややこしいので、各関数の役割や使い方を簡単にまとめてみました。
ちなみに、このメモは以下の延長線上の話になります。
投稿・固定ページのURLを取得・出力するテンプレートタグ(とりあえずこれを覚えておけばいい)
投稿・固定ページなど、通常のページへのURLを取得・出力する関数についてです。
- 取得:
get_permalink()
- 取得:
get_the_permalink()
- 取得:
post_permalink()
*非推奨! - 出力:
the_permalink()
それぞれ説明していきます。
get_permalink()
http://~ からの URL全体を取得できます。
基本的に、 ページへのリンクに用いるならこの関数を使用すればいいと思います。
使用形式
get_permalink( $id, $leavename )
引数は2つあります。それぞれの引数の説明は以下の表をご覧ください。
引数 | 説明 |
---|---|
$id | 投稿または固定ページの整数型の ID、あるいは投稿オブジェクト 初期値: 現在の投稿ID |
$leavename | 投稿名あるいは固定ページ名(%postname%)を保持するかどうか。trueの場合、実際の URI ではなく構造的なリンクを返します。初期値はfalse 例: http://www.example.com/%postname% |
おそらく第2引数はほとんど使うことなはないかと思います。
get_the_permalink()
get_permalink()
を内部でただ呼び出しているだけの関数 で、両者は エイリアス(同じ)関数です。
引数の種類や使用方法もget_permalink()
と全く同じです。
post_permalink()
「post_permalink() 」も同じ機能をもった関数ですが、バージョン 4.4.0 から非推奨になっているので注意です。
the_permalink()
get_permalink()
で取得できるURLと同じものを出力してくれます。
使用形式
the_permalink( $post );
引数はひとつです。
「 投稿・固定ID」もしくは「 投稿オブジェクト」を指定します。
$postやget_post()で取得できるオブジェクトの'guid'パラメータでも取得可能。
グローバル変数$post
や、get_post()
を使用して取得できる 投稿オブジェクトの中にも、URLの情報が保存されています。
以下のように、' guid' というキーで取得できます。
$post ->guid
get_post()-> guid
しかし、この方法で取得できるURLは先述したget_permalink()
などのテンプレートタグで取得できるURLとは形式が異なります。
'guid' パラメータで取得できるURLは、
http://example.com/?post_id=15
のような、パーマリンク設定が反映される前段階のデフォルト形式のURLです。
私たちがサイトへアクセスする時に使用するURLはパーマリンク設定で見た目が整えられたものですが、裏側ではWordPressは上記のようなデフォルト形式のURLへアクセスしています。(表現が適切ではないかもしれませんが。)
WordPress用のURLか人に見せる用のURLかの違いとでも言いましょうか。
もちろん、URLバーに打ち込んでも問題なくアクセスできます。
ただ、' guid'でURLを取得することを推奨しているサイトは見かけなかったので、使用しないほうが無難かもしれません。
投稿ページ専用・固定ページ専用のテンプレートタグ(覚えなくていい)
投稿ページのURLを取得するための関数、固定ページのURLを取得するための関数というのも用意されています。
が、これらを使うのであれば冒頭のget_permalink()
で十分です。
get_post_permalink() - 投稿ページ用
get_post_permalink($id, $leavename, $sample );
引数の説明は割愛します($id 以外ほぼ使わないので)。
投稿ページにて、echo get_post_permalink();
すると以下の様な形式のURLが出力されました。
http://wemo.tech/?post_type=post&p=1234
URLバーに表示されているものとは形式が異なるものが出力されました。
get_page_link() - 固定ページ用
get_page_link( $id, $leavename, $sample );
先ほどと同じく、引数に関しては割愛。
固定ページにて、echo get_page_link();
すると、以下の様な形式のURLが出力されました。
http://wemo.tech/test_page
こちらは、URLバーに表示されているものと同じものが出力されました。
考察
get_post_permalink()
は取得できる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つあり、第2引数 $taxonomyにタクソノミーのスラッグを指定します。
カスタムタクソノミーであればそのスラッグを指定します。" category"を指定すればカテゴリ、" post_tag"を指定すればタグのアーカイブページへのリンクを取得できます。
この 第2引数 $taxonomyは、第1引数の $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, 'タクソノミー名' )