こんにちは
コードの効率などを考えると、get_adjacent_post 関数のコードを参考にカスタマイズした関数を作成するのが正攻法なのかもしれませんが、もっと簡単な方法としてグローバル変数の $post を変更する方法ではどうでしょうか。
global $post;
$main_post = $post;
$post = get_next_post( true );
$next2 = get_next_post( true );
$post = $main_post;
$post = get_previous_post( true );
$prev2 = get_previous_post( true );
$post = $main_post;
ishitaka様
返信が遅れてしまい申し訳ございません。
ご解答ありがとうございます。
頂いたコードで試してみたのですが、
$post = get_next_post( true );
$next2 = get_next_post( true );
echo get_permalink($next2->ID );
どちらもvar_dump();
で出力したところ、値が空でした。
書き方が間違っていますでしょうか?
同じカテゴリの投稿がないのでは、ないでしょうか?
同じカテゴリの投稿がない場合、値は空になります。
また、グローバル変数の $post が設定されていない場合は、値は Null になります。
ご返信ありがとうございます。
説明不足で申し訳ございませんでした。
特にカテゴリーを設定しているわけではないです。
同一カテゴリーのリンクではなく、単純にカテゴリー関係なしに今見ている記事の
隣接している更に次の記事(前の記事)のURLやタイトルを取得したいと思っていました。
カテゴリー設定をしていないと難しいですかね??
違うカテゴリも対象とする場合は、get_next_post() の引数は true ではなく false(または指定しない)になります。
https://wpdocs.osdn.jp/関数リファレンス/get_next_post
あと、注意事項として、$post は使用後は必ず元の値に戻してください。
グローバル変数の $post は変更することは推奨されていません。その辺は理解した上で使用してください。
ご返信ありがとうございます。
>>違うカテゴリも対象とする場合は・・・
ありがとうございました。すっかり忘れていました。
>>注意事項として、$post は使用後は必ず元の値に戻してください。
こちらも親切に教えていただき、ありがとうございました。
必ず元に戻す用に心がけます。
試しに、単純に
$post = get_next_post();
var_dump($post);
$next2 = get_next_post();
var_dump($nextnext);
だけを書いてみたところ、普通に2番めの記事も取得できましたね。。。
無事できたので、大変感謝致します。ありがとうございました。
勉強不足でお恥ずかしい話ですが、上記の流れの不明点を教えていただけたら幸いです。
①global $post
←これは自分ページの投稿データが格納されていると認識していたのですがなぜここで$post
を使う必要性があったのでしょうか。上記のように使わなくても無事にできたので不思議です。。。
②get_next_post()
は次の記事情報、get_previous_post()
は前の記事情報を取得する関数だと認識していました。ですので、get_next_post()
を連続で書いても、自ページから次の次、というようにならず、自ページの次の記事情報しか取得できないと思っていましたが、なぜ取得出来たのかが気になります。
上記の疑問にお答えをいただけたら幸いです。よろしくお願いします。
取りあえず出来たようなのでよかったです。
1.
global $post はテンプレート内なら書く必要はないです。
詳細は、PHP マニュアルの「変数のスコープ」を参照してください。
2.
$post には現在の投稿情報が保持されています。$post はループ内で使用する the_post 関数等によって更新されます。
そして、get_previous_post や get_next_post 関数は、この $post を対象として、それぞれ前、後の投稿を取得しています。
よって、$post が前の投稿の場合、get_next_post() は前の前の投稿となります。
あと訂正です。
グローバル変数の $post は変更することは推奨されていません。
と書きましたが、厳密には、
適切な API 関数があればそれを使うのがベストです。グローバル変数を直接変更するのは避けましょう。
ですね。
ご返信ありがとうございます。
ご丁寧にご解答いただき、ありがとうございました。
>>global $post はテンプレート内なら書く必要はないです。
リンクまで、ありがとうございます。変数スコープについても勉強不足でしたので
是非覚えようと思います。
>>この $post を対象として、それぞれ前、後の投稿を取得しています。
そういう動きだったので次の次、前の前、と値がとれたのですね。
流れが理解できて安心しました。
グローバル変数の $postは使い終わったら元の値に戻す癖をつけておくように
心がけます。
ishitaka様、問題解決ありがとうございました。
助かりました。