サポート » 使い方全般 » Cookieを取得してpost idとマッチしたら特定の処理をしたい

  • 解決済 menber2299

    (@menber2299)


    よろしくお願い致します。
    表題の通りなのですが、Cookieに保存している複数の「値」が、現在投稿されているすべての記事の「ポストID」にマッチした場合、該当記事のタイトルや画像を表示させたいと思っています。

    自分なりに色々と調べてみて、全記事のポストIDとCookieの値を取り出すコードは分かったのですが、これをどう組み合わせれば、Cookieに保存されている値に該当する記事だけを表示できるのかが分からず困っております。

    function get_postid(){
    global $post;
    $posts = get_posts(‘numberposts=-1’);

    foreach($posts as $post){
    setup_postdata($post);
    echo “ポストID:$post->ID”;
    }

    if(isset($_COOKIE[‘hoge’])){
    foreach ($_COOKIE[‘hoge’] as $name => $value){
    echo “値:$value”;
    }
    }
    }

    初歩的な質問で誠に恐れ入りますがご教授頂ければ幸いです。
    どうぞよろしくお願い致します。

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

    (@jim912)

    Cookie に保存されている値を post__in で指定してはいかがでしょう。

    get_postsとwp queryクラスは使えるオプションがほとんど同じですので
    WP_Query
    こちらをご確認下さい。

    それはそれとして
    すべての記事を取得>全部回して照合
    よりは

    上記リンクにある post__inを使用して
    必要な記事のみを最初から取得するほうがよさそうです。

    function get_postid(){
      $match_posts = false;
      if(isset($_COOKIE['hoge'])){
        $cookie_ids = (array) $_COOKIE['hoge'];
        $args = array(
          'posts_per_page' => -1,
          'post__in' => $cookie_ids
        );
        $match_posts = get_posts($args);
      }
      return $match_posts;
    }

    cookieに入っている値の例外処理や街頭記事がない時の処理なども必要ですが
    私でしたらおおまかにこのような感じにすると思います。

    トピック投稿者 menber2299

    (@menber2299)

    jim912さま
    jdbbさま

    丁寧にご回答くださりありがとうございました。
    今回はcookieがないときの処理は不必要だったので、下記のようなコードにしてみたところ、無事動作致しました。

    <?php if(isset($_COOKIE[‘hoge’])): ?>
    <?php
    $match_posts = false;
    $cookie_ids = (array) $_COOKIE[‘hoge’];
    $args = array(
    ‘posts_per_page’ => -1,
    ‘post__in’ => $cookie_ids
    );
    query_posts($args);
    ?>

    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    //ここに内容//
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>
    <?php endif; ?>

    お教え頂いた「WP_Query」について、もっと勉強しようと思います。
    本当にありがとうございました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「Cookieを取得してpost idとマッチしたら特定の処理をしたい」には新たに返信することはできません。