WordPressで記事一覧を表示する時に必要なのがパーマリンクです。WordPressには、パーマリンクを扱うためのテンプレートタグが用意されているので、記事タイトルやアイキャッチなどと同様に簡単に取得できるようになっています。

当記事では、パーマリンクを取得できる関数の使い方についてご紹介します。パーマリンクの基本知識については以下で解説してますので、こちらもご覧ください。

パーマリンクを取得できる関数2つ

パーマリンクを取得できる関数はいくつかありますが、基本的には以下の2つを覚えておけば大丈夫です。どちらも投稿や固定ページ、カスタム投稿のすべてのページのパーマリンクが対象です。

the_permalink() パーマリンクの出力 公式ページ
get_the_permalink() パーマリンクの取得 公式ページ

the_permalink()

パーマリンクのURLを文字列で出力する関数です。(変数に格納するような使い方はできません。)PHPファイルに書き込むことで、以下の出力結果になります。

the_permalink();

// 出力結果
// https://example.com/slug/

また、URLのエスケープ処理(URLのプロトコルチェクや不適切な文字の削除・変換)も内部で行うため、安全に利用できます。

<?php
// エスケープ処理されているため特別な処理をする必要がない
?>
<a href="<?php the_permalink(); ?>">
リンク
</a>

WordPressループの中では上記のように引数無しで使えますが、ループ外で利用する場合は引数が必要です。特定の投稿ID(投稿オブジェクトも可)を引数に指定して使いましょう。

<?php
// 投稿IDが34のパーマリンクを出力
?>
<a href="<?php the_permalink( 34 ); ?>">
リンク
</a>

get_the_permalink()

パーマリンクのURLを文字列で取得できる関数です。URLを返すだけなので、変数へ格納する、出力するなどの使い方ができます。

// 変数に格納する
$permalink = get_the_permalink();

// サイト上に出力する
echo $permalink;

// 出力結果
// https://example.com/slug/

ただし、the_permalink()と違ってエスケープ処理はされません。そのため、the_permalink()同様にURLを出力する際には、以下のようにesc_url()で無害化しましょう。

<?php
// esc_url()でエスケープ処理を行う
?>
<a href="<?php echo esc_url( get_the_permalink() ); ?>">
リンク
</a>

こちらも同様にループ外で使うなら引数に投稿ID(投稿オブジェクトも可)を指定します。

<?php
// 投稿IDが34のパーマリンクを出力
?>
<a href="<?php echo esc_url( get_the_permalink( 34 ) ); ?>">
リンク
</a>/

なお、覚えておく必要はありませんが、第二引数をtrueにすることで、パーマリンク構造を返すことも可能です。使うことはほぼないので、一般的に第二引数は省略して使います。

// 第二引数にtrueを指定するとパーマリンク設定のカスタム構造を返す
echo get_the_permalink( $post, true );

// 出力結果(パーマリンク設定で「投稿名」を選択していた場合)
// https://example.com/%postname%/

the_permalink()の使用例

それでは具体的な使用例をご紹介します。以下は、最新の投稿のタイトルを5件表示する記述になります。このタイトルにリンク先URLを設定するためにthe_permalink()を利用してますので、ぜひ参考にしてください。(コピペで使えます。)

<?php
$the_query = new WP_Query( array(
  'post_type' => 'post',
  'posts_per_page' => 5
) );
if ( $the_query->have_posts() ) {
  while ( $the_query->have_posts() ) {
    $the_query->the_post();
?>
    <a href="<?php the_permalink(); ?>">
     <?php the_title(); ?>
    </a>
<?php
  }
} else {
  echo '記事がありません';
}
wp_reset_postdata();

なお、上記で利用しているthe_title()は、記事タイトルを表示するためのテンプレートタグです。記事タイトルを取得する関数については、以下をご覧ください。

まとめ

今回は、パーマリンクを取得する関数について解説しました。それぞれ様々な特徴がありますが、以下のように使い分ければ問題ないでしょう。

the_permalink() パーマリンクをHTML上に出力したい時に使う
get_the_permalink() パーマリンクを取得して加工したい時に使う

また、投稿に紐づく情報であるアイキャッチ画像やカテゴリーの取得方法についても以下の記事で解説してますので、こちらも合わせてご覧ください。