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

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

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

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3156閲覧

【wordpress】get_categoriesを使用した際のページネーションの実装について

yukabyo

総合スコア135

WordPress

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/01/23 06:44

編集2017/01/23 06:45

お世話になります。
現在wordpressのカスタム投稿のアーカイブページにて、
カスタム投稿タイプの記事の最新記事1件をカテゴリ(タクソノミー)ごとに表示しているのですが、
1ページに表示されるカテゴリ(タクソノミー)の件数を制限したく、
カテゴリの数が8件以上になった際に、ページネーションを表示したいのですが、どのように記述すればいいのか悩んでおります。
WordPress Codex 日本語版等のget_categoriesのページは読んでみたのですがよくわかりませんでした。

以下が、実際に書いているコードになります。
カスタム投稿名が report
カテゴリ(タクソノミー)名が report-cat で作成しております。

どのように記述すれば実装できますでしょうか。
よろしくお願いいたします。

php

1 <ul> 2 3 <?php 4 // タクソノミ取得 5 $catargs = array( 6 'taxonomy' => 'report-cat', 7 'hide_empty' => 0, 8 9 ); 10 $catlists = get_categories( $catargs ); 11 foreach($catlists as $cat) : // 取得したカテゴリの配列でループを回す 12 ?> 13 14 <?php 15 $args = array( 16 'post_type' => 'report', 17 'report-cat' => $cat->slug, 18 'posts_per_page' => 1, 19 'order' => 'ASC', 20 ); 21 $my_posts = get_posts( $args ); 22 if ( $my_posts ) { // 該当する投稿があったら 23 foreach ( $my_posts as $post ) : 24 setup_postdata( $post ); 25 ?> 26 <li> 27 <dl> 28 <dt><?php echo $cat->name; ?></dt> 29 <dd><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd> 30 </dl> 31 </li> 32 <?php 33 endforeach; 34 } else { 35 echo 'このカテゴリに投稿はありません'; 36 } 37 wp_reset_postdata(); 38 ?> 39 <?php endforeach; ?> 40 41 </ul>

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

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

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

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

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

guest

回答1

0

ベストアンサー

WordPressだからとあまり難しく考えず、
1ページ目でカテゴリー1件目から8件目を表示、
2ページ目でカテゴリー9件目から16件目を表示するように泥臭くコードを組みました。
もっと簡単に実現する方法があるのかもしれませんが、これもひとつの方法ということで。

PHP

1<?php 2$page = get_query_var("page") ? get_query_var("page") : '1' ; // 現在のページ数 3$cat_per_page = 2; // 1ページごとのカテゴリー数 4 5$catargs = array( 6 'taxonomy' => 'test_cat', 7 'hide_empty' => 0, 8); 9$catlists = get_categories( $catargs ); 10?> 11 12<ul> 13 14<?php for( $it=0; $it<$cat_per_page; $it++ ) : ?> 15<?php 16 $n = ($page-1) * $cat_per_page + $it; 17 if( $n >= count($catlists) ) break; 18 19// デバッグ用出力 ここから(消してOK) 20 echo 'catlists[' . $n . '] : '; 21 echo $catlists[$n]->slug; 22 echo '<br>'; 23// デバッグ用出力 ここまで(消してOK) 24?> 25 <?php 26 $args = array( 27 'post_type' => 'test', 28 'test_cat' => $catlists[$n]->slug, 29 'posts_per_page' => 1, 30 'order' => 'ASC', 31 ); 32 $my_posts = get_posts( $args ); 33 if ( $my_posts ) { // 該当する投稿があったら 34 foreach ( $my_posts as $post ) : 35 setup_postdata( $post ); 36 ?> 37 <li> 38 <dl> 39 <dt><?php echo $cat->name; ?></dt> 40 <dd><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd> 41 </dl> 42 </li> 43 <?php 44 endforeach; 45 } else { 46 echo 'このカテゴリに投稿はありません'; 47 } 48 wp_reset_postdata(); 49 ?> 50<?php endfor; ?> 51 52</ul> 53 54<?php 55// Pagination 56if( ($page-1) >= 1 ) : 57 //間違い $url = esc_url( add_query_arg( 'page', $page-1, get_the_permalink() ) ); 58 $url = esc_url( add_query_arg( 'page', $page-1, get_post_type_archive_link('test') ) ); 59 echo "<a href='".$url."'>前へ</a>"; 60endif; 61 62echo " | "; 63 64if( ($page+1) <= ceil(count($catlists)/$cat_per_page) ) : 65 // 間違い $url = esc_url( add_query_arg( 'page', $page+1, get_the_permalink() ) ); 66 $url = esc_url( add_query_arg( 'page', $page+1, get_post_type_archive_link('test') ) ); 67 echo "<a href='".$url."'>次へ</a>"; 68endif; 69?>

投稿2017/01/23 11:55

編集2017/01/24 12:48
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/01/23 12:03

投稿タイプやタクソノミー名が質問者様のものと違っているので、修正してお試しください。(直し忘れました)
yukabyo

2017/01/23 23:58

ご回答ありがとうございます! 記事数を制限して表示することはできました。 しかし、【次へ】のボタンを押すと、アーカイブページの2ページ目にいくのではなく、 個別のページ(single.php)に飛んでしまうようですm(__)m
kei344

2017/01/24 02:31

To: mizさん アーカイブページで使用されているようなので、get_the_permalink ではないのでは?
退会済みユーザー

退会済みユーザー

2017/01/24 03:02

そうですね、ご指摘ありがとうございます。アーカイブページの場合は`get_the_permalink()`の代わりに`get_post_type_archive_link('test')`でしょうか。
yukabyo

2017/01/24 09:29

kei344様 miz様 修正したところ、思ったとおりに実装することができました! 本当に感謝致しますm(__)m ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問