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

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

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

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

PHP

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

Q&A

解決済

1回答

950閲覧

カスタム投稿のカテゴリごと一覧ページネーションについて

chi_5rm

総合スコア13

WordPress

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

PHP

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

0グッド

1クリップ

投稿2019/02/22 02:50

編集2019/02/22 05:49

前提・実現したいこと

https://qiita.com/itsumoonazicode/items/a62c8d59696b65c61d2f
上記URLを参考に、カスタム投稿のページネーションについて実装ができたのですが
カスタム投稿の各カテゴリ記事を抽出した一覧にページネーションが上手くつけることができません。
ページ構成としては、infoというカスタム投稿の中に、「event」や「activity」などのカテゴリがあります。
「$not_in_category」の部分が違うのは何となくわかるのですが、どのように変更すればよいのかが分かりません…
「functions.php」、「カスタム投稿のカテゴリ記事一覧」それぞれどのように書き換えれば良いかご教示いただけますと幸いです。
よろしくお願いいたします。

該当のソースコード(functions.php)

php

1function pagenation($limit = NULL, $post_typed = 'posts', $not_in_category = NULL) { 2 global $wp_rewrite; 3 global $paged; 4 global $wp_query; 5 6 // 検索条件 7 $query = array(); 8 if ($limit != NULL) { 9 $query['posts_per_page'] = $limit; 10 } 11 if (count($query) != 0) { 12 $wp_query->query($query); 13 } 14 15 $wp_query->query(array( 16 'post_type' => $post_typed, 17 )); 18 19 if ($not_in_category != NULL) { 20 $wp_query->query(array( 21 'category__not_in' => $not_in_category, 22 )); 23 } 24 25 $paginate_base = get_pagenum_link(); 26 27 if( strpos( $paginate_base, '?' ) || !$wp_rewrite->using_permalinks() ) { 28 $paginate_format = ''; 29 $paginate_base = add_query_arg( 'paged', '%#%' ); 30 } else { 31 $paginate_format = (substr( $paginate_base, -1, 1 ) == '/' ? '' : '/') . user_trailingslashit('page/%#%/','paged'); 32 $paginate_base .= '%_%'; 33 } 34 35 36 if( $paged < 2 ) { 37 $paged = 1; 38 } 39 $args = array( 40 'base' => $paginate_base, 41 'format' => $paginate_format, 42 'total' => $wp_query->max_num_pages, 43 'current' => $paged, 44 'show_all' => false, 45 'prev_next' => true, 46 'prev_text' => '&laquo;', 47 'next_text' => '&raquo;', 48 'type' => 'array', 49 ); 50 $pagenate_array = paginate_links($args); 51 52 // 配列がある場合のみ 53 if (is_array($pagenate_array) == TRUE) { 54 $pagenate .= '<div class="wp-pagenavi">'; 55 foreach ($pagenate_array as $key => $value) { 56 57 if (preg_match('/current/', $value) == TRUE) { 58 $class = ''; 59 } 60 else { 61 $class = ''; 62 } 63 64 // $value = "<span class=\"{$class}\">".$value.'</span>'; 65 // リンク追加 66 $pagenate .= $value; 67 } 68 69 $pagenate .= '</div>'; 70 echo $pagenate; 71 } 72}

該当のソースコード(カスタム投稿のカテゴリ記事一覧)

php

1<?php $paged = get_query_var('paged') ? get_query_var('paged') : 1; 2 $args = array( 3 'posts_per_page' => 2, 4 'paged' => $paged, 5 'post_type' => 'info', 6 'suppress_filters' => false, 7 'tax_query' => array( 8 array( 9 'taxonomy' => 'info_cat', 10 'field' => 'slug', 11 'terms' => 'event' 12 ) 13 ) 14); 15$the_query = new WP_Query( $args ); 16$max_num_pages = $the_query->max_num_pages; 17 if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 18 19----省略---- 20 21<?php ($posts_per_page, 'info', 'event'); ?>

やってみたこと

if ($not_in_category != NULL) {
$wp_query->query(array(
'category__not_in' => $not_in_category,
));
}

上記部分を'category__in'にしてみたり、

<?php ($posts_per_page, 'info', 'event'); ?>

の'event'部分をIDに変更してみたりしました。

カテゴリごとの一覧もページャー自体は表示されるのですが
カテゴリに所属している記事数とページャーの表示される数が異なり、
記事がないのにページャーが表示されている状態です。

検索ワードが悪いのかもしれませんが、カスタム投稿のカテゴリ記事一覧についての
ページネーションの記事が出てこず困っております。

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

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

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

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

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

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

FKM

2019/02/22 05:28

なにかやってみたことを書いてください。
chi_5rm

2019/02/22 05:43

if ($not_in_category != NULL) { $wp_query->query(array( 'category__not_in' => $not_in_category, )); } 上記部分を'category__in'にしてみたり、 <?php ($posts_per_page, 'info', 'event'); ?> の'event'部分をIDに変更してみたりしました。 カテゴリごとの一覧もページャー自体は表示されるのですが カテゴリに所属している記事数とページャーの表示される数が異なり、 記事がないのにページャーが表示されている状態です。 検索ワードが悪いのかもしれませんが、カスタム投稿のカテゴリ記事一覧についての ページネーションの記事が出てこず困っております。 よろしくお願いいたします。
FKM

2019/02/22 05:45

やってみたことはメインの質問事項に #やってみたこと ~その内容~ で記述してみてください。他の人の目にも留まりますので。
chi_5rm

2019/02/22 05:50

ご指摘ありがとうございます、編集いたしました。 初めて使用するため、上手く使いこなせておりません…
FKM

2019/02/22 05:56

元のソースコードを見たら関数となっていて、引数を入れるだけで使えるように書いてましたが pagination($posts_per_page,"event"); とかで制御できないんでしょうか?
chi_5rm

2019/02/22 06:09

ありがとうございます。 ページネーション自体は表示されるのですが、 1件しか記事がないのに「event」のカテゴリでページネーションが表示されたり 逆に「activity」のカテゴリで記事が5件あるのにページネーションが2までしか表示されない状況です。 よろしくお願いいたします。
guest

回答1

0

ベストアンサー

その元のシステムの判定文に怪しい部分がありますね。

if( is_array($pagenate_array) == TRUE){

となっていますが、これだと$pagenate_arrayが配列かどうかの判定しかしないので、$pagenate_arrayの値が存在しない場合でもTRUEを返してしまいます。ですので、配列かどうかではなくて、配列に格納された値の個数で判定するように変更します。

if(isset($pagenate_array)) $paganate_cnt = count($pagenate_array); //値のカウント if( $paganate_cnt > 0){

これで判定を返してみてください(count($hoge)の場合だと、nullの場合に警告を吐くようになっていますので…)

投稿2019/02/22 06:20

編集2019/02/22 06:59
FKM

総合スコア3633

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

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

chi_5rm

2019/02/22 06:49

ご回答ありがとうございます! なんとか無事に表示されるようになりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問