サポート » 使い方全般 » 固定ページの新着記事一覧の表示がうまくできません。

  • 解決済 LUARCE

    (@luarce)


    やりたいこと
    すみません、よろしくお願い致します。

    件名の通りつまづいております。

    缶コーヒーを例に、ご説明させていただければと思います。
    おおまかな構成は以下の通りページが必要となります。
    ・トップ
    ・固定ページ(コーヒーの紹介ページ)+商品一覧表示(新着的なもの)
    ・固定ページ(カフェオレの紹介ページ)+商品一覧表示(新着的なもの)
    ・商品一覧ページ(コーヒーとカフェオレの商品が全部混在)
    ・詳細ページ

    カスタム投稿タイプから缶コーヒーを登録し、
    固定ページの商品一覧表示部分に5件新着分を表示させたいという内容となります。

    問題について
    首記の通り問題となっている部分は固定ページの一覧表示部分となります。
    エラーはないのですが、

    一覧部分に5件表示させたくコーヒー缶とカフェオレ缶を
    ランダムに必要件数以上登録して試したところ、
    コーヒー缶は3件、カフェオレ缶は2件しか表示されなかったりと
    思ったような動きになりません。

    以下のようになります。

    1.コーヒー
    2.コーヒー
    3.カフェオレ
    4.コーヒー
    5.カフェオレ
    6.コーヒー
    7.コーヒー
    8.カフェオレ
    9.カフェオレ
    10.コーヒー
    11.カフェオレ
    12.カフェオレ
    13.コーヒー

    結果
    ・固定ページ(コーヒーの紹介ページ)+商品一覧表示(新着的なもの) 
     コーヒー
     コーヒー
     コーヒー

    ・固定ページ(カフェオレの紹介ページ)+商品一覧表示(新着的なもの)
     カフェオレ
     カフェオレ

    そこでurlにpage/2を付与してみたところ
    次のページに表示されておりました。

    phpは、
    ‘posts_per_page’ => 5,としてif文で条件分岐させていることが原因かと思うのですが・・・
    そのため「最新登録順に5件を振り分けて表示し、その他は、page/2に表示」
    という現象になっているのかと推察しています。

    ファイル構成は、
    type.php(コーヒー缶とカフェオレ缶を混在して表示させる一覧ページ)
    coffee.php (コーヒーを表示させるテンプレート)
    cafe_au_lait.php (カフェオレを表示させるテンプレート)
    としています。

    以下にソースコードを添付致します。
    どこに問題があるのか全く分からず、途方に暮れております。

    どうか、ご助言いただけますよう何卒よろしくお願い申し上げます。

    ソース

    ■coffee.php

    
    <?php
    $args = array(
    'post_type' => 'type',
    'posts_per_page'   => 5,
    'paged' => $paged,
    ); ?>
    
    <?php query_posts( $args ); ?>
    
    <?php while (have_posts()) : the_post();
    $name = post_custom('name');
    $segment = post_custom('area_seg');
    $choice = post_custom('choice');
    ?>
    
    <!-- 条件分岐/コーヒー -->
    <?php $flag = get_post_meta($post->ID,"choice",true); ?>
    <?php if ($flag == 'コーヒー') : ?>
    
    <!-- 表示 -->
    <?php echo $area_seg; ?>
    <?php echo $choice; ?>
    <?php echo $name; ?>
    
    <?php endif; ?>
    <?php endwhile; ?>
    
    <?php wp_reset_query(); ?>
    

    ■cafe_au_lait.php.php

    
    <?php
    $args = array(
    'post_type' => 'type',
    'posts_per_page'   => 5,
    'paged' => $paged,
    ); ?>
    
    <?php query_posts( $args ); ?>
    
    <?php while (have_posts()) : the_post();
    $name = post_custom('name');
    $segment = post_custom('area_seg');
    $choice = post_custom('choice');
    ?>
    
    <!-- 条件分岐/カフェオレ -->
    <?php $flag = get_post_meta($post->ID,"choice",true); ?>
    <?php if ($flag == 'カフェオレ') : ?>
    
    <!-- 表示 -->
    <?php echo $area_seg; ?>
    <?php echo $choice; ?>
    <?php echo $name; ?>
    
    <?php endif; ?>
    <?php endwhile; ?>
    
    <?php wp_reset_query(); ?>
    
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • CG

    (@du-bist-der-lenz)

    「‘posts_per_page’ => 5,としてif文で条件分岐させていることが原因かと思うのですが・・・」と見当したところで、その結果どう変わりましたか

    こんにちは

    query_posts() は非推奨のテンプレートタグです。WP_Query の新しいインスタンスを生成するか、get_posts テンプレートタグを使うことをお勧めします。
    https://wpdocs.osdn.jp/テンプレートタグ/query_posts

    get_posts テンプレートタグの場合は、下記のページの「カスタムフィールドパラメータ」のセクションが参考になるとおもいます。
    https://wpdocs.osdn.jp/テンプレートタグ/get_posts#.E6.9C.80.E8.BF.91.E3.81.AE.E6.8A.95.E7.A8.BF.E3.82.92.E3.82.BF.E3.82.A4.E3.83.88.E3.83.AB.E9.A0.86.E3.81.AB.E4.B8.A6.E3.81.B9.E3.82.8B

    パラメータは下記のような感じでしょうか。

    $args = array(
    	'post_type' => 'type',
    	'posts_per_page' => 5,
    	'paged' => $page,
    	'orderby' => 'date',
    	'meta_query' => array( array(
    		'key' => 'choice',
    		'value' => 'コーヒー',
    	) ),
    );
    $postslist = get_posts( $args );

    Du bist der Lenz 様

    お世話になります。
    気に留めていただきましてありがとうございます。

    query_posts()は非推奨という記事は何度も目にしたのですが、
    代わりとなるコードが書けませんでした。

    ishitaka様にご教授頂きましたやり方にて改善できました。

    ishitaka 様

    お世話になります。
    ご回答誠にありがとうございます。

    新着の抜粋箇所でしたので、ご教授いただきましたやり方と
    併せまして、上から新しいものが表示されますよう
    ‘orderby’ => ‘date’,

    ‘order’=> ‘ASC’,
    に変更しましたところ、
    期待する動きに改善いたしました。

    先の返信にも書いたことで大変恐縮いたしますが、
    query_posts()は非推奨という記事は何度も目にしたのですが、
    代わりとなるコードが書けずにおりました。

    本当に、本当にありがとうございました。

    またの際にも何卒よろしくお願い申し上げます。
    本当にありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「固定ページの新着記事一覧の表示がうまくできません。」には新たに返信することはできません。