WordPressではsingle.phpなどで記事ページを展開して、ページの最後尾の方に「前後記事のリンク」をつけることはよくあると思います。
今回、その取得処理で「コードは間違いなくあってるのになぜかリンクが生成されない」という状態になってしまい、その解決に若干時間をかかってしまったので見直し方法をまとめます。
TOC
該当のコード
ファイル名:single-xxx.php (カスタム投稿記事詳細ページ)
<?php
$prev_post = get_adjacent_post( false, '', false );
$next_post = get_adjacent_post( false, '', true );
?>
<div class="prev-next">
<?php if ( $prev_post ): ?>
<a href="/en/</?php echo get_permalink( $prev_post->ID ); ?>" rel="prev">前の記事</a>
<?php endif; ?>
<?php if ( $next_post ): ?>
<a href="/en/</?php echo get_permalink( $next_post->ID ); ?>" rel="next">次の記事</a>
<?php endif; ?>
<a class="tolist" href="/en/xxxx_archive/">投稿一覧</a>
</div>
こんな感じでシンプルな前後記事の取得リンクを生成していました。
発生した問題
- 前後記事のリンクが生成されない(if分岐内に入っていない)
- var_dumpでそれぞれの変数を取得すると空文字(””)が出力されている
結論
発生した問題の結論から話すと、
作成した記事の公開状態が[非公開]の場合、get_adjacent_postでは取得出来ない
という初歩的な部分で躓いていました。
今回本番環境へ直接ファイルを書き換えて実装するというとんでも環境での作業だったので、
作成した記事などを一般の人に見られないように[非公開]設定で作成して動作確認していたのですが、
それが裏目に出てリンクが生成されなかったようです。
作成したテスト記事を[公開]状態にしたらちゃんとリンクは生成されるようになりました。
Summary
今回はWordPressで「get_adjacent_post」を使用した前後記事の取得する際のちょっとした仕様について備忘録がてらまとめました。
みなさんは本番環境で直接機能追加をするなんて環境で作業することがないことを祈りますが、
もしそのような環境で前後記事リンクを追加する場合は、記事の公開設定を確かめながら動作確認していきましょう(笑)

Comments