サポート » 使い方全般 » single-xxx.phpで最新の投稿しか表示されない

  • 解決済 sasasa24

    (@sasasa24)


    カスタム投稿xxxを作って、アーカイブページ(archive-xxx.php)を作成、個別ページ(single-xxx.php)も作成したのですが、なぜか最新の記事しか表示されず困っております。
    アドレスバーのURLはきちんと「http://sample.jp/wordpress/?xxx=投稿名」という風になるのにページに表示される内容は最新のものです。。
    どこをどう変えればいいのかアドバイス頂けないでしょうか。
    お願いします。。

    single-xxx.phpの内容は以下です。

    <?php $args = array(
                'numberposts' => 1,
                'post_type' => 'xxx'
                );
                $customPosts = get_posts($args);
                if($customPosts) : foreach($customPosts as $post) : setup_postdata( $post );
        ?>
    <?php $img = get_field('xxx_fv');
          $imgurl = wp_get_attachment_image_src($img, 'full');
          if($imgurl){ ?><img src="<? echo $imgurl[0]; ?>" alt="" style="width:100%;" />
    					<? } ?>
    
    <div class="content_all xxx_single">
    	 <div class="container">
    
              <h2><?php $txt = get_field('xxx_build');
    						if($txt){ ?><? echo $txt; ?></h2>
    					<? } ?>
    
                        <?php $txt = get_field('xxx_content');
    						if($txt){ ?><strong>内容</strong>
                            	<p><? echo $txt; ?></p>
    					<? } ?>
                        <?php $txt = get_field('xxx_place');
    						if($txt){ ?><strong>場所</strong>
                            	<p><? echo $txt; ?></p>
    					<? } ?>
    					<?php $area = get_field('xxx_info');
    						if($area){ ?>
                            	<p><? echo $area; ?></p>
    					<? } ?>
    
                        <ul class="xxx_single">
    
    <li>
    				<?php $img = get_field('xxx_image1');
    				$imgurl = wp_get_attachment_image_src($img, 'full');
    				if($imgurl){ ?><img src="<? echo $imgurl[0]; ?>" alt="" />
    				<? } ?>
                            </li>
    <li>
    <?php $img = get_field('xxx_image2');
          $imgurl = wp_get_attachment_image_src($img, 'full');
          if($imgurl){ ?><img src="<? echo $imgurl[0]; ?>" alt="" />
                                <? } ?>
                        	</li>
    <?php endforeach; ?>
    <?php else : ?>
    <?php endif;
    wp_reset_postdata(); ?>
    
     <?php wp_pagenavi(); ?>
    </div>
    </div>
    
    <?php
    get_footer();
    ?>

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • これは自作テーマですか、それとも公式テーマなどの single.php を書き換えたものですか。

    原因は、以下のコードが必ず最新のカスタム投稿を取得するからです。

    $args = array(
        'numberposts' => 1,
        'post_type' => 'xxx'
    );
    $customPosts = get_posts($args);

    他のテーマ、例えば公式テーマ Twenty Fifteen の single.php を見て、ふつうのやり方を確かめましょう。
    ふつうは、single-xxx.phpの先頭で get_posts を呼び出してその結果をループ(foreach)で表示するようなコードは書かないと思います。これはふつうの single.php でも同様です。ふつうに「ループ」をかけば大丈夫なはず。

    追記:single-xxx.php を作らなくても single.php があれば、カスタム投稿タイプ xxx の個別投稿は single.php が表示してくれます。また single.php もなければ index.php が表示してくれます。各テンプレート(phpファイル)の中に、カスタム投稿タイプを指定したクエリ(get_postsなど)をわざわざ書くと逆に表示がおかしくなります。

    single.php の一番簡単な例は(他にもあると思いますが)例えば下記のブログ記事で見られます。
    おそらく最もわかりやすいWordPressテーマ制作チュートリアル | Stocker.jp / diary

    トピック投稿者 sasasa24

    (@sasasa24)

    gblsm様
    早速の回答ありがとうございます。
    これは恐らく既存のテーマをすごくカスタマイズしているものだと思います。(頂きものです)

    カスタム投稿が複数あるので、

    $args = array(
        'numberposts' => 1,
        'post_type' => 'xxx'
    );
    $customPosts = get_posts($args);

    と記述しているのですが、
    複数ある場合でも普通にループを書けば表示されるのでしょうか…??

    single-xxx.php ではない single.php のコードにも同様の get_posts() が入っていますか?
    もし有償テーマでなければ(GPLなら)、single.php のコードを pastebin.com へ貼り付けてURLを教えていただければ見ることができます。

    single.phpがあり(index.phpはありますよね!)、その中にはget_posts()が呼ばれていないと仮定して話を進めると、次のことを試せばテンプレートの働きがわかると思います。

    1. single-xxx.php を一時的に名前変更。例えば single-xxx.php.ORIG
    2. カスタム投稿タイプxxxの単一投稿を表示。
    3. カスタム投稿タイプxxxの単一投稿が single.php によって表示されるはずです。
    トピック投稿者 sasasa24

    (@sasasa24)

    gblsm様

    single.php内にget_posts()はありませんでした。
    ので、教えて頂いた方法で何とか表示することが出来ました!
    分かりやすく教えて頂いて本当に助かりました。
    もっと基本的なことをちゃんと勉強します…。
    ありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「single-xxx.phpで最新の投稿しか表示されない」には新たに返信することはできません。