WordPressの記事へのパーマリンクを取得するための”the_permalink”関数が動作しない場合の対処法を備忘録的に投稿しておきます。
パラメータが必要
WordPress Codex のリファレンスにはオプション指定になっていますが、引数として投稿または固定ページのIDを入れないと、動作していないみたいです。
いろいろ試してみましたが、引数なしで動作したことはありません。
例えば、投稿した記事を集めてリンク付きで表示するような場合、下のようなコードを記載しても、リンクを取得することはできません。
<?php $posts = get_posts('numberposts=10'); foreach($posts as $post): ?>
<div>
<a href="<?php the_permalink(); ?>">
<div>
<?php echo $post->post_title; ?>
</div>
</a>
</div>
<?php endforeach; ?>
実際に動作させても、aタグのhrefには空文字が入ってきます。取得できない場合には、次のコードのようにthe_permalink関数の引数で投稿のIDを受け渡すことで動作するようになります。
<?php $posts = get_posts('numberposts=10'); foreach($posts as $post): ?>
<div>
<a href="<?php the_permalink($post->ID); ?>">
<div>
<?php echo $post->post_title; ?>
</div>
</a>
</div>
<?php endforeach; ?>
get_permalink関数に置き換え
the_permalink関数が使えない場合には、次のコードのように、get_permalink関数に置き換えることもできます。
<?php $posts = get_posts('numberposts=10'); foreach($posts as $post): ?>
<div>
<a href="<?php echo get_permalink($post->ID); ?>">
<div>
<?php echo $post->post_title; ?>
</div>
</a>
</div>
<?php endforeach; ?>
get_permalink 関数の場合は出力する場合に echo キーワードが必要なのが注意点です。
また、get_permalink 関数でも取得できない場合には、同様に引数に投稿または固定ページへのIDを入力することで取得できる場合があります。
まとめ
WordPressのページデザインをする際に、記事へのリンクを取得するケースは多くあります。ウィジェット機能を使わずに、過去記事や、特定のカテゴリーの記事の一覧を表示したいような場合には、ループ内で利用する場合があり、問題の特定に手間取る場合があります。
the_permalink 関数には引数はオプションになっていますが、投稿へのIDを入力することで確実に取得できる可能性が高くなるので、サイトで発生する不具合を未然に防ぐことができるので開発時に面倒でも入れておくことをおススメします。
WordPressの the_permalink 関数でリンク先が取得できない人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。