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

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

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

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

PHP

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

Q&A

3回答

2356閲覧

WordPressの記事一覧取得でカテゴリ順に記事を出力したい

pitacora

総合スコア20

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/07/25 02:24

編集2022/01/12 10:55

WordPressを使って構築したサイトで、ページャー付きの記事の一覧を出力しようとしています。
この出力の順序をカテゴリごとにしたいのですが、うまく考えつかずにいます。
何か良いお知恵をお借りできないかと思い投稿させていただきました。

望んでいる実行結果

  • タクソノミーに属するすべてのタームを呼び出した記事一覧を作成する
  • 1ページあたりの出力件数を指定できる(全件表示ではない)
  • WP Page Naviをつかってページャーを出力したい

例えばカテゴリにはカテゴリ1・カテゴリ2・カテゴリ3という3つのタームがあり、
表示件数が5件だとして、カテゴリ1の記事が3つ、カテゴリ2の記事が2つ、カテゴリ3の記事が2つだとすると、以下のようなかたちになるのが理想です。

▼1ページ目
カテゴリ1の記事 2017/07/25(記事作成日)
カテゴリ1の記事 2017/07/24(記事作成日)
カテゴリ1の記事 2017/07/23(記事作成日)
カテゴリ2の記事 2017/07/25(記事作成日)
カテゴリ2の記事 2017/07/24(記事作成日)
(ページャーがはいる)

▼2ページ目
カテゴリ3の記事 2017/07/25(記事作成日)

試したこと

get_termsでタームを取得し、foreachで繰り返し処理してみました。
このままだと各カテゴリ全件表示であれば可能なのですが、ページャーに対応させたいときはどうしたらいいのかが考えつかずに困っています。
そもそもそういったことはできないのでしょうか…。何かアドバイスをいただけると幸いです。

PHP

1<?php 2 $terms = get_terms('category'); 3 foreach ( $terms as $term ){ 4 $args = array( 5 'posts_per_page' => -1, 6 'post_type' => 'post', 7 'tax_query' => array( 8 array( 9 'taxonomy' => 'category', 10 'field' => 'slug', 11 'terms' => $term->slug, 12 ) 13 ) 14 ); 15 $myPost = get_posts($args); 16 if($myPost): 17 foreach($myPost as $post) : setup_postdata( $post ); 18 ?> 19 <a href="<?php the_permalink(); ?>"> 20 <?php $title = get_the_title( ); echo $title; ?> 21 </a> 22 <? 23 endforeach; 24 endif; 25 wp_reset_postdata(); 26 } 27?>

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

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

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

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

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

guest

回答3

0

  1. 「$paged」で現在ページ番号を取得
  2. 「各カテゴリ全件表示」のコードの前にカウンタ変数を用意する
  3. 「$paged × 1ページの表示件数」だけ記事を表示せず飛ばす
  4. 1ページの表示件数まで記事を表示
  5. それ以降の記事を表示せず飛ばす

とか。

【グローバル変数「$page」「$paged」でカテゴリーページなどに現在のページ番号を表示する方法 | WebCreativeLab(ウェブクリエイティブラボ)】
http://webcreativelab.net/wordpress/php/page_paged_number

【【WordPress】グローバル変数(global)の「$page」と「$paged」について – ysklog】
http://ysklog.net/wordpress/1614.html

投稿2017/07/28 17:48

kei344

総合スコア69364

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

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

pitacora

2017/07/31 02:37

回答いただきありがとうございました。 1〜5のプロセスについて理解することができました、コードを試してみようと思います。 1点わからないことがあるのですが、全件表示でページャーを動かすことは可能なのでしょうか…? きちんと理解ができていないようであれば申し訳ありません…
kei344

2017/07/31 02:43 編集

home.php などサイトトップであればできると思いますよ。ページャはあくまでページが呼び出されるときのクエリの結果を元にページを出力するので、コードを書いているページが元々全記事を表示する予定であれば同じようにページング可能だと思います。 固定ページでやろうとか思っているのであれば pre_get_posts で書き換える必要がありますが。 まぁまず組んでみてください。
guest

0

  • ページネーションは独自に作る
  • カテゴリー順に並べた記事を取得して表示する

という手順です。ヒントになればいいですが・・・

参考投稿をページネーション付きでカテゴリー順に表示する

php

1<?php 2global $wpdb; 3 4$post_type = 'post'; 5$all_of_posts = wp_count_posts($post_type)->publish; 6$paged = (get_query_var('paged')) ?: 1; 7$p_per_p = get_query_var('posts_per_page'); 8$base = get_pagenum_link(1); 9$format = (substr($base, -1) == '/' ? '' : '/') . user_trailingslashit('page/%#%/', 'paged'); 10$base .= '%_%'; 11$total = ceil($all_of_posts / $p_per_p); 12$mid_size = 3; 13 14echo paginate_links(array( 15 'base' => $base, 16 'format' => $format, 17 'total' => $total, 18 'mid_size' => $mid_size, 19 'current' => ($paged ?: 1), 20)); 21 22$offset = ($paged - 1) * $p_per_p; 23$sql = "SELECT DISTINCT * FROM " . $wpdb->posts . " AS p JOIN " . $wpdb->term_relationships . " AS r ON p.ID = r.object_id JOIN " . $wpdb->term_taxonomy . " AS t USING term_taxonomy_id WHERE post_type = %s ORDER BY t.term_id ASC LIMIT %d, %d"; 24$query = $wpdb->prepare($sql, $post_type, $offset, $p_per_p); 25$results = $wpdb->get_results($query, ARRAY_A); 26foreach ($results as $result) { 27 //ここに出力内容を記入。titleを出力すると 28 echo $result['title']; 29} 30

投稿2021/06/13 08:06

arumakanda

総合スコア61

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

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

0

要はカテゴリー毎の記事一覧ですよね?
http://サイト名/category/スラッグ/で表示できるものと同等という考えではないのでしょうか。
もしそうなら category-カテゴリースラッグ又はID.php のテンプレートをカテゴリーの数だけ作れば簡単です。archive.phpをコピーして作れば楽です。
カテゴリーテンプレート

出力件数は基本的には管理画面の表示設定で設定した数になるので、カテゴリー毎に出力件数を変えたい場合は以下のような感じにしてposts_per_pageの数値を変えれば良いです。

<?php $args = array( 'posts_per_page' => 5, ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ): while ( $the_query->have_posts() ): $the_query->the_post(); ?> // ループ <?php endwhile; endif; ?>

投稿2017/07/25 03:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pitacora

2017/07/25 08:43

すみません、言葉足らずで誤解を生んでしまいました。 タクソノミーに属するすべてのタームを呼び出した一覧を作りたいという意図です。 その並び順はカテゴリごとになる…ということです。 表示件数が5件だとして、カテゴリ1の記事が3つ、カテゴリ2の記事が2つ、カテゴリ3の記事が2つだとすると、 1ページ目 カテゴリ1の記事 2017/07/25 カテゴリ1の記事 2017/07/24 カテゴリ1の記事 2017/07/23 カテゴリ2の記事 2017/07/25 カテゴリ2の記事 2017/07/24 2ページめ カテゴリ3の記事 2017/07/25 …というようなかたちです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問