カスタム投稿の一覧ページ(アーカイブ)の 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 を作る

