質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5208閲覧

WordPress カテゴリ別アーカイブページのループ(表示数指定)がうまくいきません

zungu

総合スコア7

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/08/28 03:43

###実現したいこと
WordPressのカテゴリー別ページで、(archive.php)
記事1~10を大きめ枠で表示(A)、
その下に、記事11~20を小さめ枠で表示(B)し、Bにのみページャーを付けたいと考えています。
(投稿/月別/投稿者別アーカイブでも同じデザイン)

###発生している問題
A、B 2つのwhileループを設置した時点では、カテゴリ内の記事のみを表示しますが、
query_posts で posts_per_page や offset を指定すると
全記事を表示してしまいます。
どのようにすればうまくいくでしょうか。

query_posts は非推奨のため、WP_Query を使用したいと思いますが、
その場合の正しいループの仕方を教えていただけますでしょうか。

どうぞよろしくお願いいたします。

###該当のソースコード

<!-- A ここから--> <?php query_posts('posts_per_page=10'); if ( have_posts() ) : echo '<ul>'; while ( have_posts() ) : the_post(); get_template_part( 'content-archive', get_post_format() ); endwhile; echo '</ul>'; else : echo '<div>お探しの記事は見つかりませんでした</div>'; endif; ?> <!-- B ここから--> <?php query_posts('posts_per_page=10&offset=10'); if ( have_posts() ) : echo '<div class="article_list list_02 new matchHeight_list">'; echo '<ul>'; while ( have_posts() ) : the_post(); get_template_part( 'content-archive', get_post_format() ); endwhile; echo '</ul>'; if (function_exists('responsive_pagination')) { responsive_pagination($additional_loop->max_num_pages); }; echo '</div>'; endif; ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

これって1ページ目はA記事1~10、B記事11~20、2ページ目はA記事11~20、B記事21~30という表示と言うことでしょうか。
それならば、こんな感じでどうでしょう。

php

1<?php //Aはここから 2 $args = array( 3 'paged' => $paged, 4 'posts_per_page' => 10, 5 ); 6 $wp_query = new WP_Query( $args ); 7if( $wp_query->have_posts() ) : 8 echo '<ul>'; 9while( $wp_query->have_posts() ) : $wp_query->the_post(); 10 get_template_part( 'content-archive', get_post_format() ); 11endwhile; 12 wp_reset_postdata(); 13 echo '</ul>'; 14else : 15 echo '<div>お探しの記事は見つかりませんでした</div>'; 16endif; 17?> 18 19<?php //Bはここから 20 if( $paged == 0 ) { 21 $off_p = 10; 22 } else { 23 $off_p = $paged*10; 24 } 25 $args = array( 26 'paged' => $paged, 27 'posts_per_page' => 10, 28 'offset' => $off_p, 29 ); 30 $wp_query = new WP_Query( $args ); 31if( $wp_query->have_posts() ) : 32 echo '<div class="article_list list_02 new matchHeight_list">'; 33 echo '<ul>'; 34while( $wp_query->have_posts() ) : $wp_query->the_post(); 35 get_template_part( 'content-archive', get_post_format() ); 36endwhile; 37 wp_reset_postdata(); 38 echo '</ul>'; 39 if( function_exists( 'responsive_pagination' ) ) { 40 responsive_pagination( $additional_loop->max_num_pages ); 41 }; 42 echo '</div>'; 43endif; 44?> 45

お使いのページャー?によってはうまく動作しないかもしれません。
参考まで。

投稿2017/08/29 01:47

8-0_nyan5

総合スコア2352

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zungu

2017/08/30 04:53

ご回答とサンプルソース、ありがとうございます! 試してみたのですが、ページネーション(paginate_links)がうまくいかなかったのと、カテゴリー別ページでもやはり全投稿記事を表示してしまいました。 offsetを1ページ目と2ページ目以降で分岐する記述など、勉強になりました!
guest

0

自己解決

結局AとBでループを分けるのは断念し、1つのループで記事を出すことにしました。

記事ループが始まる前に query_string で、
同カテゴリ内の記事のみを取り出し、表示件数の指定ができました。

php

1<?php 2parse_str( $query_string, $args ); 3$args = array_merge($args,array( 4 'posts_per_page' => 13, 5 ) 6); 7$newsQuery = new WP_Query($args); 8if ($newsQuery->have_posts()) : 9 echo '<ul>'; 10 while ( $newsQuery->have_posts() ) : $newsQuery->the_post(); 11 get_template_part( 'content-archive-new', get_post_format() ); 12 endwhile; 13 include('paginate.php'); 14else : 15 echo '<div>お探しの記事は見つかりませんでした</div>'; 16endif; 17wp_reset_query();?>

下記の記事が参考になりました。
カテゴリ(category.php)の表示件数を指定する
【wordpress】WP_Queryを指定する配列にquery_stringを加える方法

投稿2017/08/30 04:53

zungu

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問