WordPressでページのURLを取得してリンクを作成する

WordPressでページのURLを取得してリンクを作成する

WordPressでページのURLを文字列で取得してから、実際にWordPressに表示してみる。そして、取得したページのURLでリンクを作成するという一連の流れを覚えることにします。

取得してリンク作成するページのURLはWordPressの「投稿ページ」「固定ページ」のURLです。

WordPressのループ内とループの外の両方でURLの文字列を取得してページのURLリンクを作成できるようにするのが目標です。

 

WordPress関数でページのURLを取得する

 

WordPressでページのURLを取得するには、WordPress関数の「the_permalink()」と「get_permalink()」を使用します。

 

the_permalink()

WordPressのthe_permalink()関数はループ内に投稿のパーマリンクのURLを文字列で表示できます。

 

get_permalink()

WordPressのget_permalink()関数はループ内とループの外でページのURLを文字列で取得することができます。表示も可能です。

 

実際にWordPressの関数「the_permalink()」と「get_permalink()」を使用して、ループ内とループ外にページのURLを取得してリンクを作成したときの内容を元に説明を進めていきます。

 

WordPressループ内でURLを取得

 

はじめにWordPressループ内でURLを取得する場合です。WordPressの関数は「the_permalink()」を使用します。表示までしてくれます。

WordPressのループ内でthe_permalink()を使用する例として、front-page.phpのメインループ内にthe_permalink()関数を記述してみたのが以下のHTMLとPHPのコードです。

 

<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
    <ul class="loop-link-test">
        <li>
            <h2 class="archive_title_link">
                <?php the_permalink(); ?>
            </h2>
        </li>
    </ul>
<?php endwhile; endif; ?>

 

WordPressループ内でURLの出力確認をするために、HTMLのulタグとliタグでマークアップした要素にthe_permalink()関数をhタグでマークアップした記述です。

 

<?php the_permalink(); ?>

 

WordPressループ内でthe_permalink()をPHP開始タグと終了タグで囲みます。

するとループ内に出力したURLの表示結果は以下の画像のようになります。

 

 

ループ内で使用していますので、ループの中で処理されている投稿ページのパーマリンクのURLを取得してページに文字列で表示することができています。

 

Advertisement

 

URLを出力した結果の画像では「the-permalink-get-permalink」と「post-16608」というURLの形式で文字列が表示されていますが、このURLの形式の違いは、WordPressのパーマリンク設定を「投稿名」に設定して、WordPressの投稿編集画面にて投稿ページのパーマリンクを入力してるか、してないかの違いです。

 

ループの外でページのURLを取得

 

WordPressでページのURLを出力するときに「ループの外でページのURLを文字列で取得する」場合です。ループ外では特定の投稿ページのURLや、固定ページのURLを取得することになるかと思います。

ループの外で使用するWordPressの関数はget_permalink()関数です。

WordPressのfront-page.phpで右サイドバーをループ外として、get_permalink()関数でURLを取得して表示してみたのが以下の記述です。

 

<aside>
    <ul class="loop-out-link">
        <li>
            <h2>get_permalink(引数なし)</h5><br>
            <?php echo get_permalink(); ?>
        </li>
        <li>
            <h2>get_permalink(引数あり)</h5><br>
            <?php echo get_permalink( 16916 , false ); ?>
        </li>
    </ul>
</aside>

 

WordPressのループの外でページのURLを出力するために使用するget_permalink()関数は、ページのURLを表示するためにはechoの記述が必要なことを覚えておきたいです。

また、記述例で上から一番目のli要素では、引数なしのget_permalink()でページのURLを取得。

上から二番目のli要素のget_permalink()は引数ありでページのURLを取得しています。

 

 

はじめてループの外でページのURLを取得した場合、パーマリンクを投稿名にしているなら、どのページのURLなのか分かるかもしれませんが、get_permalink()を引数なしで使用して得た表示結果がpost-15539のようだと、WordPressがどのページURLを取得しているのか謎に思えます。

 

この謎の解決ヒントは、先に説明をしたthe_permalink()関数を使用したWordPressのメインループ内にあります。

 

 

例として使用しているページのfront-page.phpには、すでにメインループの処理で投稿ページのURLを取得して一覧で表示しています。このとき、一覧表示で一番下の投稿ページのURLが「post-15339」です。

ループの外でページのURLを取得した表示結果も「post-15339」です。

 

Advertisement

 

get_permalinkは引数に記事IDを指定しないで、ループ処理をしているページのループ外で使用した場合には、現在の表示しているページのパーマリンクではなく、ループの一番最後の投稿のURLを返します。

そのためthe_permalink()関数を使用してWordPressのループの外でページのURLを取得するときには、取得したい投稿ページや固定ページのIDを引数に記述してページのURLを取得します。

 

<?php get_permalink( $id, $leavename ); ?>

 

the_permalink()の第一引数に、取得したいページのIDを渡します。the_permalink()の第二引数にはtrueまたはfalseを記述します。

例えばWordPressのループの外で取得したい投稿IDが「16916」だった場合、第一引数に16916を渡します。

 

<?php echo get_permalink( 16916 , false ); ?>

 

the_permalink()の第二引数については、基本的にはfalseです。初期値もfalseなので省略しても、第一引数で指定した記事IDのページURLを取得できました。

falseではなくtrueにすると構造的なURLを文字列で取得します。

 

http://localhost:8000/%postname%/

 

WordPressでループの外にページのURLをthe_permalink()で取得して表示してみましたが、the_permalink()はechoやver_dumpを使えばループ内でも使用可能です。

ループ処理で表示する記事一覧のURLを文字列で出力できるか確認するために、WordPressのメインループにver_dumpをぶちこんでみました。

 

<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
    <ul class="loop-link-test">
        <li>
        <?php $test = the_permalink(); var_dump( $test ); ?>
            <h2 class="archive_title_link">
            <?php the_permalink(); ?>
            </h2>
        </li>
    </ul>
<?php endwhile; endif; ?>

 

ループ内、the_permalink()関数を$test変数に代入してver_dumpで一覧記事のURLを確認。ver_dumpの下にはthe_permalink()で投稿ページのURLを表示です。

 

 

文字列(string)で記事ごとのURLを取得できているのが確認できます。

 

WordPressでページのURLリンクを作成

 

WordPressでページのURLを取得することや、表示するやり方を理解できると、取得したページのURLを使用してリンクを作成することができるようになります。

WordPressでページのURLリンクを作成する方法については、引き続きWordPressのthe_permalink()とget_permalink()で取得したページのURLでリンクを作成します。

 

<a href="the_permalinkかget_permalinkが入る">リンクテキスト</a>

 

リンク方法としてはHTMLのaタグhref属性の記述方法を思い浮かべます。

 

記事一覧のリンクを作成

 

WordPressでページのURLを取得してリンクを作成するパターンとして、メインループ内の投稿タイトルのリンクを作成する場合です。

 

<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
    <ul class="loop-link-test">
        <li>
            <h2 class="archive_title_link">
                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </h2>
        </li>
    </ul>
<?php endwhile; endif; ?>

 

実際のループ内には投稿のサムネイルやカテゴリー、日付などもループ処理することになりますが、投稿タイトルのみをループしてリンクしています。

投稿タイトルをリンクするPHPコードの部分を以下に切り分けました。

 

<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

 

HTMLのaタグhref属性の値にWordPressのthe_permalink()をPHPの開始タグと終了タグで優しく囲んで記述します。

 

Advertisement

 

次にリンクテキストを作成します。WordPressのループ内で投稿タイトルにリンクをするので、WordPress関数のthe_title()をaタグのリンクテキストを記述する部分に記述します。そうすると投稿のタイトルをリンクした記事一覧が表示できます。

 

 

特定のページのリンクを作成

 

お次は、特定のページのリンクを作成する場合です。WordPressのループの外でリンク作成してみることに。

 

<a href="<?php echo esc_url( get_permalink( 16098 ) ); ?>"><?php echo get_the_title( 16098 ); ?></a>

 

特定のページのリンクを作成するときには、HTMLのaタグhref属性の値にesc_url()を記述、esc_url()の引数にWordPressのget_permalink()関数を記述します。そしてget_permalink()の第一引数に特定のページとしてリンクする投稿ページや固定ページのIDを渡します。

なんだか難しそうな記述方法でリンク作成をしている感じがしますが、上記のPHPコードを左から順番に説明しているだけなのです。

記述例では相変わらず記事タイトルにURLをリンクしています。ループの外なので、リンクテキストはWordPressのget_the_title関数を使用します。このときget_the_titleの引数には、特定のページのリンクにするためにget_permalinkの引数に渡したのと同じページのIDを渡します。

 

 

WordPressで特定のページのリンクをサイドバーに作成した表示結果は、上の画像のように特定の投稿ページのリンクを作成することができます。青背景の投稿ごとのタイトルへのリンクはループ内での出来事です。

 

おまけ:the_permalinkとget_permalinkの違い

 

最後に今回だいぶ登場したWordPressの関数「the_permalink」と「get_permalink」の違いを軽く説明したいと思います。

まず関数名の先頭に「the」か「get」が付くかの違いがありますね。

この関数名に「the」か「get」のどちらが付いているかの違いによって使い方の違い出てきます。

 

<?php the_permalink(); ?>//表示してくれる
<?php get_permalink(); ?>//取得できるように結果を返すから、表示は自分でしてね。というやつ
<?php echo get_permalink(); ?>//echoと仲良しにしてあげると表示もしてくれる

 

the_permalink関数はwp-includes/link-template.phpにソースがあり、esc_url()関数でテキストや属性などのURLを無害化して、処理した結果をechoで表示してくれます。

一方のget_permalink()はwp-includes/link-template.phpにソースがあり、returnで呼び出し元に結果が返ってきますが、表示はできないので、表示するならechoの記述が必要になるという違いがあります。

WordPressでページのURLを取得してリンクを作成するときに、この記事が少しでもヒントになればと思います。

WordPress使い方カテゴリの最新記事