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

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

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

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

Q&A

解決済

2回答

3522閲覧

WordPressのショートコードで指定カテゴリ投稿数を表示させたい

sika

総合スコア52

WordPress

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

0グッド

0クリップ

投稿2015/12/04 06:55

WordPressのショートコードで指定したカテゴリ名の投稿数を返す物を固定ページ内で使いたいのですが上手く投稿数が取得できません

【固定ページ】

<h2>関東地区</h2> このエリアは現在[postsNumber name="関東"]件登録されています

【functions.php】

function getPostsNumber($atts) { extract(shortcode_atts(array( 'name' => '', ), $atts)); //カテゴリ名からIDへ $catID = get_cat_ID($name); //IDの投稿数を取得 $postsNumber = get_category($catID)->category_count; return $postsNumber; } add_shortcode('postsNumber', 'getPostsNumber');

「functions.php」でショートコードの引数で指定したカテゴリ名をIDに戻すまではできているのですが、

特定IDの投稿数を取得に関するエントリー等で

get_category('cat')->category_count;

で参考にしているのですが、"0"しか返ってきません。
もちろん記事自体は10件以上投稿しているので"0"ではないのですが・・・

上記の条件で取得可能なコードのご教授宜しくお願いします。

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

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

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

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

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

guest

回答2

0

var_dump(get_category($catID))をして中に何が入っているのを見るのはいかがですか。

投稿2016/02/07 11:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sika

2016/02/13 03:31

普段あまり大規模な配列を扱う機会が少ないため wordpressの配列から吐き出される情報量は多すぎて どういうデータが入っているかは何となく把握できるのですが ピンポイントで扱うのは難しいです。
guest

0

ベストアンサー

php

1$postsNumber = get_category($catID)->category_count; 2return $postsNumber;

部分を

php

1$postsNumber = get_category($catID); 2return $postsNumber->category_count;

とかですかね。


子カテゴリ数も全部取得:サンプルコード

テストしてないですが、こんな感じです

php

1function getPostsNumber($atts) { 2 extract(shortcode_atts(array( 3 'name' => '', 4 ), $atts)); 5 6 //対象カテゴリのターム情報を取得 7 $target_cat_term = get_term_by('name', $name, 'category'); 8 9 //親カテゴリのカウント数 10 $target_cat_count = $target_cat_term->count; 11 12 //子カテゴリ配列を取得 13 $child_cat_lists = $catlist = get_term_children($target_cat_term->term_id, 'category'); 14 15 //子カテゴリカウント総数用変数の初期化 16 $child_cat_count = 0; 17 18 //子カテゴリ配列をそれぞれカウント足す 19 foreach($child_cat_lists as $child_term_id) { 20 $each_cat_term = get_term_by('id', $child_term_id, 'category'); 21 $child_cat_count = $child_cat_count + $each_cat_term->count; 22 } 23 24 //親カテゴリカウントと子カテゴリカウント総数を足す 25 $postsNumber = $target_cat_count + $child_cat_count; 26 27 return $postsNumber; 28} 29add_shortcode('postsNumber', 'getPostsNumber');

新しい質問を投稿するのがteratail的には正しそうですが(--;

投稿2016/02/07 10:58

編集2016/02/13 04:46
amaranthine

総合スコア501

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

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

sika

2016/02/13 04:06

出力できました!ありがとうございます。 実装してから気づいたのですが、本来念頭に置いていた 指定した親カテゴリに属する子孫カテゴリの総投稿数を合計した投稿数を出力する場合にこのパターンのコードは対応できなかったので、以下の仕様が出力可能なコードのご教授いただければ幸いです。 ------------------------------------------------------------------------------------------------------ 【投稿記事に指定しているカテゴリと投稿数】 (親)「関東」   ┗[子]「東京都」(投稿:10)   ┗[子]「神奈川」(投稿:3)   ┗[子]「千葉」(投稿:5)   ┗[子]「茨城」(投稿:1)   ┗[子]「群馬」(投稿:0)   ┗[子]「栃木」(投稿:0)   ┗[子]「埼玉」(投稿:4) ------------------------------------------------------------------------------------------------------ 【固定ページ編集】 <h2>関東地区</h2> このエリアは現在[postsNumber name="関東"]件登録されています 【実際のページ出力】 <h2>関東地区</h2> このエリアは現在23件登録されています ------------------------------------------------------------------------------------------------------
amaranthine

2016/02/13 04:44

回答を編集して追記しました。
sika

2016/02/13 05:31

完璧な返答ありがとうございます。 だいぶ前の質問でやっと返答を得られたのが最近であったのと さらに内容が局所的すぎるため、 amaranthineさんに縋る様なかたちになってしまいました。 重ね重ねありがとうございます。
amaranthine

2016/02/13 05:36

あ、12月の質問だったんですね、今気付きました。お役に立てて良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問