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

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

ただいまの
回答率

88.65%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,003

sika

score 46

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"ではないのですが・・・

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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


部分を

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

とかですかね。


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

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

function getPostsNumber($atts) {
    extract(shortcode_atts(array(
        'name' => '',
    ), $atts));

    //対象カテゴリのターム情報を取得
    $target_cat_term = get_term_by('name', $name, 'category');

    //親カテゴリのカウント数
    $target_cat_count = $target_cat_term->count;

    //子カテゴリ配列を取得
    $child_cat_lists = $catlist = get_term_children($target_cat_term->term_id, 'category');

    //子カテゴリカウント総数用変数の初期化
    $child_cat_count = 0;

    //子カテゴリ配列をそれぞれカウント足す
    foreach($child_cat_lists as $child_term_id) {
        $each_cat_term = get_term_by('id', $child_term_id, 'category');
        $child_cat_count = $child_cat_count + $each_cat_term->count;
    }

    //親カテゴリカウントと子カテゴリカウント総数を足す
    $postsNumber = $target_cat_count + $child_cat_count;

    return $postsNumber;
}
add_shortcode('postsNumber', 'getPostsNumber');

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/13 13:06

    出力できました!ありがとうございます。
    実装してから気づいたのですが、本来念頭に置いていた
    指定した親カテゴリに属する子孫カテゴリの総投稿数を合計した投稿数を出力する場合にこのパターンのコードは対応できなかったので、以下の仕様が出力可能なコードのご教授いただければ幸いです。


    ------------------------------------------------------------------------------------------------------
    【投稿記事に指定しているカテゴリと投稿数】
    (親)「関東」
      ┗[子]「東京都」(投稿:10)
      ┗[子]「神奈川」(投稿:3)
      ┗[子]「千葉」(投稿:5)
      ┗[子]「茨城」(投稿:1)
      ┗[子]「群馬」(投稿:0)
      ┗[子]「栃木」(投稿:0)
      ┗[子]「埼玉」(投稿:4)
    ------------------------------------------------------------------------------------------------------
    【固定ページ編集】
    <h2>関東地区</h2>
    このエリアは現在[postsNumber name="関東"]件登録されています

    【実際のページ出力】
    <h2>関東地区</h2>
    このエリアは現在23件登録されています
    ------------------------------------------------------------------------------------------------------

    キャンセル

  • 2016/02/13 13:44

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

    キャンセル

  • 2016/02/13 14:31

    完璧な返答ありがとうございます。

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

    キャンセル

  • 2016/02/13 14:36

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/13 12:31

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

    キャンセル

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

  • ただいまの回答率 88.65%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る