サポート » 使い方全般 » get_postsでループ処理をした後のthe_contentの内容について

  • 初めて投稿させていただきます。

    アーカイブ(archive.php)において、カテゴリーID10にget_postsを用いてカテゴリーID8のカスタムフィールドをループ表示します。

    その後the_contentでループを表示しているカテゴリーID10の記事内容を表示させると、内容がID8のthe_contentになってしまいます。

    ID8のカスタムフィールドのループ前にthe_contentを置くとID10の内容が表示できるのでpostのIDがリセットされないのが原因だと思うのですが、どうもやりかたがわかりません。

    ループをリセットするためにrewind_posts()を使ったりいろいろ試したのですが、どれもだめでした。

    どなたかご教授いただけませんでしょか?

    以下が、そのソースとなります。

    <?php if (is_category('10')): ?>
    
    <?php the_title(); ?>
    
    <?php
    $posts = get_posts('numberposts=100&category=8');
    global $post;
    ?>
    <?php
    if($posts): foreach($posts as $post): setup_postdata($post); ?>
    
    <p class="Price">¥<?php echo get_post_meta($post->ID,'プラン値段',TRUE);?></p>
    
    <p><?php echo get_post_meta($post->ID,'プラン特徴',TRUE);?></p>
    
    <?php endforeach; endif; ?>
    
    <?php the_content(); ?>//←ここの表示をID10にしたいのですがID8になってしまいます。
    
    <?php endif; ?>
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • $postsの内容をリセットしたいのは私もやりたくてできなかったので退避させる方法を使用しています。例として

    $my_posts = $posts;
    $posts = get_posts(・・・略
    
    $posts = $my_posts;

    こんな感じです。過去のフォーラムに似たような記事があって参考にしました。
    正直私もループ内で$postsの内容をリセットする方法を知りたいです(汗)

    トピック投稿者 kopy

    (@kopy)

    shokun0803様

    ご返信ありがとうございます。
    気づくのが遅くて申し訳ございませんでした。

    上記を試させていただいたのですが、やはりID8の内容が表示されてしまいます。

    <?php if (is_category('10')): ?>
    
    <?php the_title(); ?>
    
    <?php
    $my_posts = $posts;
    $posts = get_posts('numberposts=100&category=8');
    global $post;
    ?>
    <?php
    if($posts): foreach($posts as $post): setup_postdata($post); ?>
    
    <p class="Price">¥<?php echo get_post_meta($post->ID,'プラン値段',TRUE);?></p>
    
    <p><?php echo get_post_meta($post->ID,'プラン特徴',TRUE);?></p>
    
    <?php endforeach; endif; ?>
    
    <?php $posts = $my_posts; ?>
    <?php the_content(); ?>//←ここの表示をID10にしたいのですがID8になってしまいます。
    
    <?php endif; ?>

    書き方間違っていますでしょうか?

    それともしご面倒でなければ「過去のフォーラムの似たような記事」のアドレスもお教え願えませんでしょうか?

    不躾な質問で申し訳ございません。

    ご教授の程よろしくお願いいたします。

    モデレーター jim912

    (@jim912)

    kopyさん、こんにちは。

    get_postsを利用されるのであれば、$postsと$postという変数名を使わなければ問題ありません。

    <?php if (is_category('10')): ?>
    <?php the_title(); ?>
    <?php
    $plan_posts = get_posts('numberposts=100&category=8');
    if($plan_posts): foreach($plan_posts as $plan_post): ?>
    
    <p class="Price">¥<?php echo get_post_meta($plan_post->ID,'プラン値段',TRUE);?></p>
    <p><?php echo get_post_meta($plan_post->ID,'プラン特徴',TRUE);?></p>
    <?php endforeach; endif; ?>
    <?php the_content(); ?>
    <?php endif; ?>

    jim912さん

    同様の現象で困っていました。
    jim912さんの回避方法ですんなり解決しました。

    変数名はどうしても類似してくるので気をつけます。
    ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「get_postsでループ処理をした後のthe_contentの内容について」には新たに返信することはできません。