サポート » テーマ » WordPressの「先頭に固定表示」を使用した際の表示される件数について

  • お世話になります。

    トップフロントページにカスタム投稿blogという記事を2件表示させています。

    その時に先頭に固定表示があった場合、固定表示と通常記事、合計2件を表示させる場合は
    以下の記述で成功しました。

    <?php
    	$list_cnt = 2; //表示させたい件数
    	$sticky = get_option('sticky_posts'); //先頭固定の記事
            if ( !empty($sticky) ) $list_cnt -= count($sticky); //もし先頭固定の記事があったら、その件数を「$list_cnt」の値から引く
    	$the_query = new WP_Query(array(
    		'post_type' => array('blog'),
    		'posts_per_page' => $list_cnt,
    	));?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            // 表示する内容 //
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>

    ですが、実際に制覇したいことは、
    ・固定記事を2件選択した場合、固定記事のみ2件表示
    ・固定記事が1件の場合は、固定記事1件と通常記事1件を表示
    ・固定記事がない場合は、通常記事を2件表示
    ということをしたいです。

    上記の書き方では、固定記事が2件あった時、
    固定記事が2件、通常記事が1件の合計3件表示されてしまいます。

    どのように記述すれば、どの場合も2件表示にすることができますか?

    よろしくお願いいたします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • こんにちは

    posts_per_page が 0 以下になってしまっているかでしょうか。
    posts_per_page が -1 の場合は全てになりますが、それ以外(0 や -2 以下)の場合はマニュアルに既定されていないのでどうなるかわかりません。
    よって、$list_cnt が 0 以下の場合は処理をスキップすればいいとおもいます。

    if ステートメント(2行)を追加

    $list_cnt = 2; //表示させたい件数
    $sticky = get_option('sticky_posts'); //先頭固定の記事
    if ( !empty($sticky) ) $list_cnt -= count($sticky); //もし先頭固定の記事があったら、その件数を「$list_cnt」の値から引く
    if ( $list_cnt > 0 ): // <- 追加
    	$the_query = new WP_Query(array(
    		'post_type' => array('blog'),
    		'posts_per_page' => $list_cnt,
    	));?>
    	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    		// 表示する内容 //
    	<?php endwhile; ?>
    	<?php wp_reset_postdata(); ?>
    <?php endif; ?> // <- 追加
    • この返信は4年、 9ヶ月前にishitakaが編集しました。理由: 誤記
    スレッド開始 Risa28

    (@risa28)

    ishitaka様

    ご返信ありがとうございます。

    if ステートメントを追加すると、何も表示されなくなりました。
    $list_cntを3にすると固定記事が2件、通常記事が1件表示されます。

    if ステートメントを追加する前も固定記事が2件あったとき、先頭に固定記事が2件、通常記事が3件と全ての記事が表示されてしまいます。
    $list_cntを3にすると固定記事が2件、通常記事が1件表示されます。

    そもそもの構文の記述が今回実現したいことと違うのでしょうか…

    先頭に固定表示する記事も blog 投稿タイプでしたか。
    このコードの前に先頭に固定表示するコードがあるものとおもってしまいました。
    では、常に最大2個ということなので、posts_per_page に 2 を指定するだけでいいのではないでしょうか。
    (if ステートメントは不要です)

    'posts_per_page' => 2,

    すみません訂正します。

    ふたつのループが必要そうです。

    $list_cnt = 2; //表示させたい件数
    $sticky = get_option('sticky_posts'); //先頭固定の記事
    if ( !empty($sticky) ) $list_cnt -= count($sticky); //もし先頭固定の記事があったら、その件数を「$list_cnt」の値から引く
    if ( count($sticky) > 0 ):
    	$the_query = new WP_Query(array(
    		'post_type' => array('blog'),
    		'post__in' => $sticky,
    	));?>
    	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    		// 表示する内容 //
    	<?php endwhile; ?>
    <?php endif; ?>
    if ( $list_cnt > 0 ):
    	$the_query = new WP_Query(array(
    		'post_type' => array('blog'),
    		'posts_per_page' => $list_cnt,
    		'ignore_sticky_posts' => 1,
    	));?>
    	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    		// 表示する内容 //
    	<?php endwhile; ?>
    <?php endif; ?>
    <?php wp_reset_postdata(); ?>
    • この返信は4年、 9ヶ月前にishitakaが編集しました。理由: コード修正
    スレッド開始 Risa28

    (@risa28)

    ishitaka様

    はい、全てがblog投稿タイプです。

    $list_cnt = 2; //表示させたい件数
    $sticky = get_option('sticky_posts'); //先頭固定の記事
    if ( !empty($sticky) ) $list_cnt -= count($sticky); //もし先頭固定の記事があったら、その件数を「$list_cnt」の値から引く
    	$the_query = new WP_Query(array(
    		'post_type' => array('blog'),
    		'posts_per_page' => 2,
    	));?>
    	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    		// 表示する内容 //
    	<?php endwhile; ?>
    	<?php wp_reset_postdata(); ?>

    このようにしましたら、固定表示が2件、通常記事が2件表示されました。

    posts_per_pageを1にすると固定表示が2件、通常記事が1件、
    固定記事を一つに絞ると固定記事1件、通常記事1件になるのですが、固定記事がない場合は通常記事が1件のみの表示になってしまいます・・・

    固定記事が1つ以上ある場合は、固定記事のみ2件表示。
    固定記事が1つのみの場合は、固定記事、通常記事を1件ずつ表示。
    固定記事がない場合は、通常記事のみ2件表示。

    固定記事が全て表示されるので、常に最大2個ということができない状態です。

    すみませんレスが行き違いしたようですね。
    ひとつ前のレスを参照してください。

    スレッド開始 Risa28

    (@risa28)

    ishitaka様

    すいません、被ってしまい訂正に気づきませんでした。

    訂正いただいたコードで
    固定記事が1つ以上ある場合は、固定記事のみ2件表示。
    固定記事が1つのみの場合は、固定記事、通常記事を1件ずつ表示。
    は実現できました!

    が、固定記事が一つもない状態だと、全ての記事が表示されてしまいます・・・・

    スレッド開始 Risa28

    (@risa28)

    すいません、最初のループでif ステートメントを抜かしておりました。

    訂正いただいたコードで希望の動きをするようになりました!

    本当にありがとうございます。助かりました・・・!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「WordPressの「先頭に固定表示」を使用した際の表示される件数について」には新たに返信することはできません。