原因は、query_posts の引数に表示したいページが指定されていない為です。指定しないと、いつでも先頭ページが表示されます。
query_posts の呼び出しを削除して、管理画面の 設定 » 表示設定 » 1ページに表示する最大投稿数 を 20 にすればよいと思います。
「1ページに表示する最大投稿数」の設定に関係なく20件表示させたい場合は、下記リンク先サイトの例が参考になります。例「条件にしたがって表示件数を変更」を見てください。
WordPressでページ送りが動かないのはどう考えてもquery_postsが悪い!【pre_get_posts、WordPressループまとめ】
gblsmさま
ありがとうございます。
カスタム投稿タイプで作った全カテゴリーの記事一覧ページも作っており、
そちらは「category-news.php」を作り
<ul>
<?php
$args = array(
'post_type' => array('news1','news2','news3','news4'),
'posts_per_page' => 20,
'paged' => $paged,
); ?>
<?php query_posts( $args ); ?>
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
</ul>
<div id="pagenavis" class="clearfix">
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
</div>
と記載しています。
そのため、管理画面の 設定 » 表示設定 » 1ページに表示する最大投稿数は1としています。
こちらのcategory-news.phpも同様に40件以上が表示されません。
こういった場合はどのように対処するのが良いかご教授いただければ幸いです。
すみませんが最初に戻って確認させてください。
pagenaviを使ってページ送りを実装しておりまして
各ページ20件表示としページ送りさせております。
現在40件以上記事があるのですが、40件までしか表示されず
新規で記事を足すと40件目の記事が消えていってしまいます。
pagenaviで表示されて選べるページ番号が1と2しかなくて、20件×2ページの計40件しか表示されない、という状況でしょうか。それともページ番号は3以上も表示されており選べるけれど、選んでも記事(最新から40件を超えた古い記事)が表示されない状況でしょうか。
言葉足らずで申し訳ございません。
pagenaviで表示されて選べるページ番号が1と2しかなく
20件x2ページの計40件しか表示されない
という状態になっております。。。
archive.php に書いてある query_posts の呼び出しを無くす、つまり下記のコードに変えた場合は、pagenavi のページ番号を使ってページ送りしてすべての記事を表示できますか?
<ul>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
</ul>
<div id="pagenavis" class="clearfix">
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
</div>
momonutsさん、query_posts の呼び出しを無くした結果、うまくすべての記事を表示できたら、そのままで下記の変更を試してみてください。
まずテーマの functions.php に次のコードを追加します。
function set_post_per_page( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_category( 'news' ) ) {
$query->set( 'posts_per_page', 20 );
$query->set( 'post_type', array( 'news1', 'news2', 'news3', 'news4' ) );
return;
}
if ( $query->is_archive() ) {
$query->set( 'posts_per_page', 20 );
return;
}
}
add_action( 'pre_get_posts', 'set_post_per_page' );
次に category-news.php からも query_posts の呼び出しを無くします。
それから両方のアーカイブを表示してみてください。
gblsm様
ご教授ありがとうございます!
上記方法を試したところ、archive.phpで表示させているページは
40件以上も表示される様になりました。
感謝いたします!
ただ、category-news.phpの方は記事が表示されなくなりました。。。
category-news.phpは、「投稿」からカテゴリー(news1〜news4)を作りnewsを親カテゴリに
したものの一覧を表示させるのではなく、CPT UIを利用して作った複数カスタム投稿の記事一覧を投稿させるために作ったものです。
そのために教えていただいたコードだと適応しないのでしょうか、、、
記事が表示されなくなってしまったため、category-news.phpは元にもどし
<ul>
<?php
$args = array(
'post_type' => array('news1','news2','news3','news4'),
'posts_per_page' => 20,
'paged' => $paged,
); ?>
<?php query_posts( $args ); ?>
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; // end of the loop. ?>
<?php wp_reset_query(); ?>
</ul>
としています。
function.phpに教えていただいたコードを記述したためでしょうか
20件以上は表示されない状態です。
自分でも色々試してみたのですが、どの方法もダメで泣きそうになってます。。
何度もお聞きしてしまい大変申し訳ございませんが、ご教授いただければ幸いです。
何卒お願い申し上げます。
query_posts の呼び出しを無くした状態の archive-news.php のコードは、下記のようになっていますか?
<ul>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
</ul>
<div id="pagenavis" class="clearfix">
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
</div>
コメントを書き間違えました、すみません。
誤: archive-news.php のコードは
正: category-news.php のコードは
gblsm様
はい、その通りに記述したのですが
そうしましたら記事一覧が表示されなくなってしまったのです。。。
こちらで実験したとき、カスタム投稿タイプ news1 等の記事にカテゴリー news を付けていました。 category-news.php が呼び出されるときは、news が付いている記事でなければ表示できないので。
おそらく momonuts さんのところでは news を付けていないのでしょうね。その場合、functions.php に追加した関数の一つ目のif文を次のように変更してください。
if ( $query->is_category( 'news' ) ) {
$query->set( 'posts_per_page', 4 );
$query->set( 'post_type', array( 'news1', 'news2', 'news3', 'news4' ) );
$query->set( 'cat', NULL );
$query->set( 'category_name', NULL );
return;
}
念のため、if文でチェックする順番は is_category が先で、is_archive は後です。
gblsm様
ありがとうございます!
教えていただいたコード部分
$query->set( 'posts_per_page', 4 );
を
$query->set( 'posts_per_page', 20 );
と変更し、記述してみた所全ての記事が問題なく表示され
各ページ20件ごと表示という理想の形になりました!!
根気強くご教授いただき感謝いたします!
本当にありがとうございました!!