サポート » 使い方全般 » ループの外で投稿IDを取得したい

  • 解決済 mocha_coffee

    (@mocha_coffee)


    こんにちは。いつもありがとうございます。

    ■page.php

    <?php if ( have_posts() ) while ( have_posts() ) : the_post();?>
    <?php $now_id = get_the_ID(); ?>
    <?php endwhile;  ?>

    上記のようにpage.phpのループ内でそのページの投稿IDを取得しています。
    同様にsidebar.phpでも、表示されているそのページの投稿IDを取得し、
    表示の切り替えを行いたいのですが、その場合、sidebar.php内で再度
    上記のようにループをまわすのは効率が悪い気がしています。
    ループの外で現投稿のIDを取得する方法はあるのでしょうか?


    <?php is_page(該当の投稿ID);?>

    という方法も考えたのですが、この方法ですと
    新しいページを追加するごとに、
    sidebar.phpを書き換えることになりそうです。
    親子関係を調べて親が変わらない限り自動で
    表示させるようにしたいというのが理想です。

    ※そもそもpage.phpやsingle.phpは一記事を
     一ページで表示する場合が多いと思うのですが、
     何故ループが必要なのかよくわかっておりません。
     そのあたりもご教授いただけると大変ありがたいです。
     すみません、よろしくお願いいたします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • モデレーター Takuro Hishikawa

    (@hissy)

    ループ外でもget_the_ID()で行けるはず。

    single.phpはDBからの検索結果が1件
    index.phpはDBからの検索結果が通常10件
    件数が異なるだけで仕組みは同じですね。

    モデレーター jim912

    (@jim912)

    $post->IDで。

    モデレーター Takuro Hishikawa

    (@hissy)

    $post->IDで。

    get_the_IDの中身もおんなじですしね 🙂

    function get_the_ID() {
    	global $post;
    	return $post->ID;
    }

    ご回答いただきありがとうございます!!

    >hissyさま
    関数リファレンスにget_the_ID()は「ループの中でのみ使用することができます。」と
    あるので不安だったのですが、貼り付けていただいたfunctionの中身を見ると
    今のところ使っても大丈夫そうですね。ありがとうございました。

    >jim912さま

    $post->IDで。

    こちらもためしてみたところ、

    <?php
    if ( have_posts() ) while ( have_posts() ) : the_post();
    echo $post->ID;
    endwhile;
    ?>

    としなくても

    echo $post->ID

    だけで表示できました。ありがとうございました。

    モデレーター Takuro Hishikawa

    (@hissy)

    「ループの中でのみ使用することができます。」というより「ループの中で使用しなければなりません。」という和訳のほうが近いかなと思います。ほぼ一緒かな。
    解決したら解決済みにしておいてくださいね。

    ありがとうございます!

    新たに関連のことで疑問が湧いたので何度も申し訳ありませんが、
    追加で質問させていただきます。
    使用できるから使ってもいいのかと思っていたのですが、
    「ループの中で使用しなければなりません。」ということは、
    使えるけど「本当はループ外では使ってないいけない」ということでしょうか?

    モデレーター Takuro Hishikawa

    (@hissy)

    ループの外だと意図通りの動作をしないよ、という注意でしょう。分かって使っていて思ったとおりの挙動をしていれば問題ありません。

    安心しました。
    重ね重ねありがとうございました!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「ループの外で投稿IDを取得したい」には新たに返信することはできません。