teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

コメントからの要望で修正

2019/06/14 08:48

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -4,6 +4,10 @@
4
4
  ですが、今回の場合に限り、正確な動作にはなるかと思います。
5
5
  また、不都合ございましたら、コメントください。
6
6
 
7
+ ※追記:かなり静的な作りではありますが、できる限り動的になるよう、使うカテゴリIDを配列に入れ、
8
+ 回す感じに変更しました。
9
+ 配列の中の数値を変えれば、対応するカテゴリで記事数をカウントできるようになっています。
10
+
7
11
  ```php
8
12
  <?php
9
13
  // ここで、親カテゴリのカウントアップする変数を用意
@@ -11,10 +15,21 @@
11
15
  $parentCountAll = 0;
12
16
 
13
17
  // 今回に必要な子カテゴリの数だけ、カテゴリ取得して、記事カウント数を足していく(13〜19のカテゴリIDのもの)
18
+ // 入れるカテゴリの番号の配列を用意する
19
+ $catIDs = array(
20
+ 13,
21
+ 14,
22
+ 15,
23
+ 16,
24
+ 17,
25
+ 18,
26
+ 19
27
+ );
28
+
14
- for ($i=13; $i < 20; $i++) {
29
+ foreach($catIDs as $catId) {
15
30
  $args = array(
16
31
  'orderby' => 'name',
17
- 'include' => $i,
32
+ 'include' => $catId,
18
33
  'hide_empty' => 0,
19
34
  'pad_counts' => 1
20
35
  );

4

質問の修正を受け、回答を修正

2019/06/14 08:47

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -1,3 +1,53 @@
1
+ 質問の修正を受け、回答を修正いたします。
2
+ ご承知いただきたいのが、**かなり野暮で、他では応用の効かない書き方**となることです。
3
+ (カテゴリが増えたりすると、構文の修正が必要になる)
4
+ ですが、今回の場合に限り、正確な動作にはなるかと思います。
5
+ また、不都合ございましたら、コメントください。
6
+
7
+ ```php
8
+ <?php
9
+ // ここで、親カテゴリのカウントアップする変数を用意
10
+ // 他の親に関しては、また別途別名の親カウント変数を用意する
11
+ $parentCountAll = 0;
12
+
13
+ // 今回に必要な子カテゴリの数だけ、カテゴリ取得して、記事カウント数を足していく(13〜19のカテゴリIDのもの)
14
+ for ($i=13; $i < 20; $i++) {
15
+ $args = array(
16
+ 'orderby' => 'name',
17
+ 'include' => $i,
18
+ 'hide_empty' => 0,
19
+ 'pad_counts' => 1
20
+ );
21
+ $categories = get_categories( $args );
22
+ foreach ( $categories as $category ) {
23
+ $parentCountAll += $category->count;
24
+ }
25
+ }
26
+
27
+ ?>
28
+ <td width="18%" align="center" valign="middle" bgcolor="#ccffff">
29
+ <?php
30
+ $args = array(
31
+ 'orderby' => 'name',
32
+ 'include' => '2'
33
+ );
34
+ $categories = get_categories( $args );
35
+ foreach ( $categories as $category ) {
36
+ echo '<a href="' . get_category_link( $category->term_id ) . '">' . $category->name .' </a>';
37
+ }
38
+ ?><br/>
39
+
40
+ <?php
41
+ // 親カテゴリでは、$parentCountAllを表示するのみにする
42
+ echo $parentCountAll;
43
+
44
+ ?>
45
+
46
+ </td>
47
+ <!-- 以下は質問者さんの書いた通りのままでオーケー -->
48
+ ```
49
+
50
+ -------- 以下元回答 --------
1
51
  少し野暮ったいですが、表示の前に、先にforeachでデータを用意して、そのデータを元に、
2
52
  数を表示させましょう。
3
53
 

3

一応、カテゴリ単体でも表示できるよう修正

2019/06/14 05:46

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -5,24 +5,33 @@
5
5
  <td>
6
6
  北海道・東北(この箇所のコードは省略)
7
7
  <?php
8
-
8
+ /*
9
9
  $args = array(
10
10
  'orderby' => 'name',
11
11
  'include' => '2',
12
12
  'pad_counts' => 1
13
13
  );
14
+ */
15
+ // カテゴリを限定しないため、カテゴリ取得のオプションをつけない
14
- $categories = get_categories( $args );
16
+ $categories = get_categories();
15
- // 記事数をカウントする変数を用意
17
+ // 子カテゴリの記事数をカウントする変数を用意
16
18
  $catParentAllCount = 0;
17
19
  // 記事の合計数を計算
20
+ // カテゴリ全てで走査
18
21
  foreach ( $categories as $category ) {
22
+
23
+ if ($category->parent) {
24
+ // まず親がいる(親を除外したい)
25
+ $parent = $category->parent;
26
+ if ($parent->cat_ID == 2) {
27
+ // 親のIDが2である
28
+ // ここでようやっとカウントアップ
19
- $catParentAllCount += $category->count;
29
+ $catParentAllCount += $category->count;
30
+ }
31
+ }
20
32
  }
21
33
 
22
- foreach ( $categories as $category ) {
34
+ echo $catParentAllCount;
23
- // 北海道・東北の親カテゴリの場合は、カウントの合計値、そうでない時は、通常のカテゴリの記事数を表示
24
- echo ($category->cat_ID == 2 ? $catParentAllCount : $category->count);
25
- }
26
35
 
27
36
  ?>
28
37
  </td>

2

カウントアップがうまくできていないようなので、三項演算子を解除した。

2019/06/13 15:19

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  $catParentAllCount = 0;
17
17
  // 記事の合計数を計算
18
18
  foreach ( $categories as $category ) {
19
- $catParentAllCount += ($category->cat_ID == 2 ? 0 : $category->count);
19
+ $catParentAllCount += $category->count;
20
20
  }
21
21
 
22
22
  foreach ( $categories as $category ) {

1

計算がずれないよう、一応()で計算を囲った。

2019/06/13 14:35

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -14,13 +14,14 @@
14
14
  $categories = get_categories( $args );
15
15
  // 記事数をカウントする変数を用意
16
16
  $catParentAllCount = 0;
17
+ // 記事の合計数を計算
17
18
  foreach ( $categories as $category ) {
18
- $catParentAllCount += $category->cat_ID == 2 ? 0 : $category->count;
19
+ $catParentAllCount += ($category->cat_ID == 2 ? 0 : $category->count);
19
20
  }
20
21
 
21
22
  foreach ( $categories as $category ) {
22
23
  // 北海道・東北の親カテゴリの場合は、カウントの合計値、そうでない時は、通常のカテゴリの記事数を表示
23
- echo $category->cat_ID == 2 ? $catParentAllCount : $category->count;
24
+ echo ($category->cat_ID == 2 ? $catParentAllCount : $category->count);
24
25
  }
25
26
 
26
27
  ?>