get_post_type_archive_link():カスタム投稿の一覧ページの URL を出す(WordPress)

WordPress

カスタム投稿の一覧ページ(アーカイブ)の URL を返します。メニューやパンくず、1 件のページの「一覧へ戻る」のリンクを作るときに使います。

書き方

get_post_type_archive_link( string $post_type ): string|false
  • $post_type:投稿タイプの名前(register_post_type() の 1 つ目に渡した名前)です。
  • 戻り値:一覧ページの URL です。一覧ページがない(has_archive が false)ときや、登録されていない投稿タイプのときは false です。

使い方の例

<a href="<?php echo esc_url( get_post_type_archive_link( 'my_article' ) ); ?>">一覧へ戻る</a>

// false のときはリンクを出さない
$archive_url = get_post_type_archive_link( 'my_article' );
if ( $archive_url ) {
    echo '<a href="' . esc_url( $archive_url ) . '">一覧を見る</a>';
}

パーマリンクの設定が /archives/%post_id%(最後に / がない形)の作業環境で試すと、次の値が返りました(ドメインは例です)。

get_post_type_archive_link( 'my_article' );    // http://example.com/my_article
get_post_type_archive_link( 'post' );         // http://example.com(投稿の一覧がトップのとき)
get_post_type_archive_link( 'page' );         // false(固定ページには一覧ページがない)
get_post_type_archive_link( 'no_such_type' ); // false(登録されていない)

よくある間違い

  • 最後に / を自分で足す:最後の / は「設定 → パーマリンク」の形に合わせて付きます。最後に / がない設定のサイトで /my_article/ を開くと、/my_article へ 301 で転送されました。返った URL はそのまま使います。
  • has_archive を true にしていない:register_post_type() で 'has_archive' => true(または一覧の URL に使う文字)を渡していないと、false が返り、href="" のリンクになります。
  • 投稿タイプを登録する前に呼ぶ:init より前(register_post_type() の前)に呼ぶと、まだ登録されていないので false です。
  • 一覧ページが 404 になる:投稿タイプを足したあとは、パーマリンクの決まりが作り直されるまで一覧ページが 404 になることがあります。「設定 → パーマリンク」で「変更を保存」を押すと作り直されます。
  • パーマリンクが「基本」(?p=123 の形)のサイトでは、?post_type=my_article の形の URL が返ります。

関連する関数

  • register_post_type():カスタム投稿を登録する
  • get_term_link():カテゴリーやタクソノミーの一覧ページの URL を出す
  • is_post_type_archive():今のページがカスタム投稿の一覧ページかを調べる
  • home_url():サイトのトップからの URL を作る

逆引きリファレンスの一覧へ