サポート » 使い方全般 » トップページの新着記事だけ更新されないが、タイプミスをしたと思った

  • 解決済 trazomaw

    (@trazomaw)


    すべてのページに5件新しい記事を表示する処理を書いています。
    投稿ページや固定ページだと問題ないのですが、固定ページをトップページにしたページのみ、新着記事がformタグを作って、submitボタンを使ってリロードさせてやらないと表示されません。
    <?php query_posts(‘showposts=5’); ?>
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

    新着記事の内容

    <?php endwhile; ?>
    <?php endif; ?>

    とか、
    <?php query_posts(array( ‘posts_per_page’ => 5, ‘offset’ => 0 )); ?>
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

    新着記事の内容

    <?php endwhile; ?>
    <?php endif; ?>
    だとダメで、
    たまたまタイプミスしたいかのコードだと表示されます。
    <?php query_posts(array( ‘posts_per_page’ => 5, ‘offset’ => 0’ )); ?>
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

    新着記事の内容

    <?php endwhile; ?>
    <?php endif; ?>

    ミスしたところは、query_postsの一番右のシングルクォーテーションを書いてしまったところです。
    さっぱりわかりません。

    どなたかご教示願います。

15件の返信を表示中 - 1 - 15件目 (全50件中)
  • もう1回リロードさせたら、画面が真っ白になってしまいました。

    これが当たり前の現象でしょうね。。。

    画面が真っ白になるということは、phpのコードエラーのことが多いのでチェックしてみて下さい。見た目大丈夫そうでも、phpの中に全角スペースとかがうっかり紛れ込んでしまっている…なんてことはよくあります。

    もう一度
    <?php query_posts(array( ‘posts_per_page’ => 5, ‘offset’ => 0 )); ?>
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

    と入力したらうまく動きました。

    なんででしょうか?
    このやり方は間違っていないのでしょうか?
    自身が持てません。
    どなたかご教示願います。

    たびたびすいません。
    <?php $loop = new WP_Query( array( ‘post_type’ => ‘post’ ) ); ?>
    という1行を1番植えに足して
    <?php query_posts(array( ‘posts_per_page’ => 5, ‘offset’ => 0 )); ?>
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    こうやったらうまくいきました。
    このやり方は間違っていないのでしょうか?
    自身が持てません。
    どなたかご教示願います。

    ここんところはちゃんと勉強した方がいいんですが、簡単に言ってしまえばWP_Query()はクエリの新規作成、query_posts()は置き換え…というイメージです(かなり乱暴な言い方ですが)。ですので、コード的には動作するコードですが、論理的には間違ってるということになります。

    query_posts(array( 'post_type' => 'post' , 'posts_per_page' => 5, 'offset' => 0 ) );

    こうやっておいて、必要記述が終わったところ(大抵の場合はwhileが終わった後か、ページナビゲーションが終わった後)に

    wp_reset_query();

    を入れてみて下さい。

    何回かテストをしていて、
    <?php $loop = new WP_Query( array( ‘post_type’ => ‘post’ ) ); ?>
    の下に <?php wp_reset_query(); ?>を付け足したら、また動かなくなり、
    <?php wp_reset_query(); ?>を削除してもしても動かなくなってしまいました

    モデレーター gatespace

    (@gatespace)

    ※ソースコードを投稿する時はその部分を「code」ボタンで囲ってください

    すべてのページに5件新しい記事を表示する処理を書いています。

    「最近の投稿・ウィジェット」を使う方法じゃダメですか?
    ダッシュボードのウィジェットから追加できる物なのですが、テーマのテンプレートファイルに直接記述することもできます。

    日本語Codex:テンプレートタグ/the widget

    <?php
    the_widget('WP_Widget_Recent_Posts', 'number=5' );
    ?>

    また、全ページに入れるのであれば、メインクエリを改変する query_posts ではなく get_posts(あるいは WP_Query)を使うべきです。
    これらの関数の違いや使い方を正しく理解していないと、思った通りの結果になりません。

    参照:WordPress ループ&クエリーのモヤモヤを解消しよう!

    <?php
    $args = array(
        'posts_per_page' => 5
    );
    $my_posts = get_posts( $args );  //  $posts = とは書かない
        foreach ( $my_posts as $post ) :  setup_postdata( $post );
            /* do stuff
               the_title(), the_permalink() 等使用可
            */
        endforeach;
    wp_reset_postdata();
    ?>

    どちらの方法もすでに試しましたが、Topページだけうまく表示されません。
    Topページは固定ページでオリジナルのテンプレートを使っています。

    $args = array(
      'posts_per_page' => 5,
      'posts_per_archive_page' => 5,
       'offset' =>0,
      'nopaging' => false,
      'paged' => get_query_var('page')
    ); ?>
    <?php $the_query = new WP_Query( $args ); ?>
    <?PHP $count=0; ?>
      <?php if ( $the_query->have_posts() ) {
    	 while ( $the_query->have_posts() ) {
    		 $the_query->the_post(); ?>
    
    		  <?php $count+=1; ?>
    
    <li>
    		  <span class="date">
    
    		  <?php the_time('Y年n月j日'); ?>
    
    		  <?php
    
    		    $days=30;
    
    		    $today=date('U'); $entry=get_the_time('U');
    
    		    $diff1=date('U',($today - $entry))/86400;
    
    		    if ($days > $diff1) {
    
    			  echo '<img src="http://www.trazomaw.miraiserver.com/images/new.png" alt="New" />';
    
    		  }
    
    		  ?>
    
    		  </span>
    
    		    <a>"><?php the_title();?></a>
        
    		  </li>
    		<?php if($count==5) break; ?>
    
    	<?php } ?>
    <?php } ?>	  
    
      <?php wp_reset_query(); ?>
    
    <?php
    $args = array(
        'posts_per_page' => 5
    );
    $my_posts = get_posts( $args );  //  $posts = とは書かない
        foreach ( $my_posts as $post ) :  setup_postdata( $post ); ?>
    
    <li>
    		  <span class="date">
    
    		  <?php the_time('Y年n月j日'); ?>
    
    		  <?php
    
    		    $days=30;
    
    		    $today=date('U'); $entry=get_the_time('U');
    
    		    $diff1=date('U',($today - $entry))/86400;
    
    		    if ($days > $diff1) {
    
    			  echo '<img src="http://www.trazomaw.miraiserver.com/images/new.png" alt="New" />';
    
    		  }
    
    		  ?>
    
    		  </span>
    
    		    <a>"><?php the_title();?></a>
        
    		  </li>
    <?php    endforeach;
    wp_reset_postdata();

    両方共ダメです。

    <?php $count+=1; ?>はカウントでループさせない方法でやってみた時の名残です。

    <?php $count+=1; ?>はカウントでループさせない方法でやってみた時の名残です。
    ↑訂正します。慌てていて勘違いしていました。忙しいもので。

    ループを自分のわかる書き方に直しました。
    ↓この書き方だと意味がわからなくて

    <?php
    
    // クエリ
    query_posts( $args );
    
    // ループ
    if ( have_posts() ) :
      while ( have_posts() ) : the_post();
          echo '
    <li>';
    	  the_title();
    	  echo '</li>
    ';
      endwhile;
    else:
    endif;
    
    // クエリをリセット
    wp_reset_query();
    ?>

    「code」ボタンとは[code][/code]でいいのですか?
    テスト
    [code]$cnt=0;[/code]

    >Topページだけうまく表示されません

    上手く表示されないというのは、具体的にどう表示されないのでしょう?最初にあったように真っ白なページになってしまうのか、それとも上下は出るが中身がないのか。

    固定ページの中でループさせる場合、方法としては先にも挙げた通り:
    1)WP_Queryを使うか、get_postsを使う
    2)query_postsを使う
    の2種類があります。世話役のgatespace氏が仰る通り、可能な限りget_postsを使うのが一般的だと思いますので、それで記述すると例の通り:

    <?php
    $args = array(
        'posts_per_page' => 5
    );
    $my_posts = get_posts( $args );  //  $posts = とは書かない
        foreach ( $my_posts as $post ) :  setup_postdata( $post );
            /* do stuff
               the_title(), the_permalink() 等使用可
            */
        endforeach;
    wp_reset_postdata();
    ?>

    になる訳で、最も良く使う(例えばサイドバーとかで)記述方法であり、使われている頻度も高いので、もし、ちゃんと動かないのであれば、この部分以外のところがなにか悪さをしている可能性も否定出来ませんね。

    動作しないのは(固定ページを指定した)トップページのみ、ということですが、他のページはちゃんと動作している…という部分がひっかかります。他の「固定ページ」でもちゃんと動作しているでしょうか?

    また、サイドバーのように、最新5件を書き出すコードだけ別のファイルにして、それを読み込むというのも良いかもしれません。

    ※コードは「code」ボタンでくくってください。

    壊れたエントリの方も直して下さいね。

    あ、上にボタンがあったのですね。焦ってまして、すいません。もう一度書き直します。正しく動きませんした。

    $args = array(
      'posts_per_page' => 5,
      'posts_per_archive_page' => 5,
       'offset' =>0,
      'nopaging' => false,
      'paged' => get_query_var('page')
    ); ?>
    <?php $the_query = new WP_Query( $args ); ?>
    <?PHP $count=0; ?>
      <?php if ( $the_query->have_posts() ) {
    	 while ( $the_query->have_posts() ) {
    		 $the_query->the_post(); ?>
    
    		  <?php $count+=1; ?>
    
    		  <li>
    
    		  <span class="date">
    
    		  <?php the_time('Y年n月j日'); ?>
    
    		  <?php
    
    		    $days=30;
    
    		    $today=date('U'); $entry=get_the_time('U');
    
    		    $diff1=date('U',($today - $entry))/86400;
    
    		    if ($days > $diff1) {
    
    			  echo '<img src="http://www.trazomaw.miraiserver.com/images/new.png" alt="New" />';
    
    		  }
    
    		  ?>
    
    		  </span>
    
    		    <a href="<?php the_permalink(); ?>"><?php the_title();?></a>
        
    		  </li>
    		<?php if($count==5) break; ?>
    
    	<?php } ?>
    <?php } ?>	  
    
      <?php wp_reset_query(); ?>
    
    <?php
    $args = array(
        'posts_per_page' => 5
    );
    $my_posts = get_posts( $args );  //  $posts = とは書かない
        foreach ( $my_posts as $post ) :  setup_postdata( $post ); ?>
    
    		  <li>
    
    		  <span class="date">
    
    		  <?php the_time('Y年n月j日'); ?>
    
    		  <?php
    
    		    $days=30;
    
    		    $today=date('U'); $entry=get_the_time('U');
    
    		    $diff1=date('U',($today - $entry))/86400;
    
    		    if ($days > $diff1) {
    
    			  echo '<img src="http://www.trazomaw.miraiserver.com/images/new.png" alt="New" />';
    
    		  }
    
    		  ?>
    
    		  </span>
    
    		    <a href="<?php the_permalink(); ?>"><?php the_title();?></a>
        
    		  </li>
    
    <?php    endforeach;
    wp_reset_postdata();
    ?>

    上記両方のやり方でダメでした。

    古い記事は表示されます。
    sabumitボタンを遅たあと、それ以降の更新記事が表示されません。
    他のテンプレート固定ページはちゃんと表示されます。

15件の返信を表示中 - 1 - 15件目 (全50件中)
  • トピック「トップページの新着記事だけ更新されないが、タイプミスをしたと思った」には新たに返信することはできません。