サポート » 使い方全般 » 見ている記事の前後(2つ先)のURLやタイトルを取得したいです。

  • 解決済 saki-saki

    (@saki-saki)


    見ている記事の2つ先の前後の記事情報を取得したいです。
    single.phpで

    get_next_post();
    get_previous_post();

    または
    get_adjacent_post();
    で前後の記事情報を取得出来るかと思います。

    ここで、この2つどちらでもかまわないのですが、
    次の次の記事の情報(2つめ)のURLやタイトルを取得する方法はありますでしょうか。

    (例)
    a記事 b記事 c記事 d記事 e記事
    c記事を閲覧している時に、a記事とe記事のURLを取得したい。

    また、他の方法があれば教えていただけたら幸いです。
    よろしくお願いします。

    • このトピックは saki-sakiが4 ヶ月、 1 週前に変更しました。
8件の返信を表示中 - 1 - 8件目 (全8件中)
  • ishitaka

    (@ishitaka)

    こんにちは

    コードの効率などを考えると、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;
    saki-saki

    (@saki-saki)

    ishitaka様

    返信が遅れてしまい申し訳ございません。
    ご解答ありがとうございます。

    頂いたコードで試してみたのですが、

    $post = get_next_post( true );
    $next2 = get_next_post( true );
    echo get_permalink($next2->ID );

    どちらもvar_dump();で出力したところ、値が空でした。
    書き方が間違っていますでしょうか?

    ishitaka

    (@ishitaka)

    同じカテゴリの投稿がないのでは、ないでしょうか?
    同じカテゴリの投稿がない場合、値は空になります。
    また、グローバル変数の $post が設定されていない場合は、値は Null になります。

    saki-saki

    (@saki-saki)

    ご返信ありがとうございます。

    説明不足で申し訳ございませんでした。
    特にカテゴリーを設定しているわけではないです。
    同一カテゴリーのリンクではなく、単純にカテゴリー関係なしに今見ている記事の
    隣接している更に次の記事(前の記事)のURLやタイトルを取得したいと思っていました。

    カテゴリー設定をしていないと難しいですかね??

    ishitaka

    (@ishitaka)

    違うカテゴリも対象とする場合は、get_next_post() の引数は true ではなく false(または指定しない)になります。
    https://wpdocs.osdn.jp/関数リファレンス/get_next_post

    あと、注意事項として、$post は使用後は必ず元の値に戻してください。
    グローバル変数の $post は変更することは推奨されていません。その辺は理解した上で使用してください。

    • この返信は4 ヶ月前に  ishitaka さんが編集しました。
    saki-saki

    (@saki-saki)

    ご返信ありがとうございます。
    >>違うカテゴリも対象とする場合は・・・
    ありがとうございました。すっかり忘れていました。

    >>注意事項として、$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()を連続で書いても、自ページから次の次、というようにならず、自ページの次の記事情報しか取得できないと思っていましたが、なぜ取得出来たのかが気になります。

    上記の疑問にお答えをいただけたら幸いです。よろしくお願いします。

    ishitaka

    (@ishitaka)

    取りあえず出来たようなのでよかったです。

    1.
    global $post はテンプレート内なら書く必要はないです。
    詳細は、PHP マニュアルの「変数のスコープ」を参照してください。

    2.
    $post には現在の投稿情報が保持されています。$post はループ内で使用する the_post 関数等によって更新されます。
    そして、get_previous_post や get_next_post 関数は、この $post を対象として、それぞれ前、後の投稿を取得しています。
    よって、$post が前の投稿の場合、get_next_post() は前の前の投稿となります。

    あと訂正です。

    グローバル変数の $post は変更することは推奨されていません。

    と書きましたが、厳密には、

    適切な API 関数があればそれを使うのがベストです。グローバル変数を直接変更するのは避けましょう。

    ですね。

    saki-saki

    (@saki-saki)

    ご返信ありがとうございます。
    ご丁寧にご解答いただき、ありがとうございました。

    >>global $post はテンプレート内なら書く必要はないです。
    リンクまで、ありがとうございます。変数スコープについても勉強不足でしたので
    是非覚えようと思います。

    >>この $post を対象として、それぞれ前、後の投稿を取得しています。
    そういう動きだったので次の次、前の前、と値がとれたのですね。
    流れが理解できて安心しました。

    グローバル変数の $postは使い終わったら元の値に戻す癖をつけておくように
    心がけます。

    ishitaka様、問題解決ありがとうございました。
    助かりました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • このトピックに返信するにはログインが必要です。