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

質問編集履歴

5

文法の修正

2018/09/13 10:42

投稿

muro
muro

スコア99

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  ]);
9
9
  foreach($terms as $term) {
10
10
  if($term->count == 0) {
11
- var_dump($term);
11
+ wp_delete_term($term->term_id, "hogehoge");
12
12
  }
13
13
  }
14
14
  $offset += 100;
@@ -29,7 +29,7 @@
29
29
  foreach($ids as $term_id) {
30
30
  $term = get_term($term_id, "hogehoge");
31
31
  if($term->count === 0) {
32
- var_dump($term);
32
+ wp_delete_term($term->term_id, "hogehoge");
33
33
  }
34
34
  }
35
35
  ```
@@ -37,4 +37,8 @@
37
37
  次に、上記のようにタームのidだけの配列を取得して、その配列でforeachする方法に変えてみました。
38
38
  すると、いくつかの投稿0件のタームは取得できたのですが、途中で相変わらずメモリリークが発生してしまいました。
39
39
 
40
- わざわざすべてのタームを取得しなくても、投稿0件のタームだけ抜き出す方法はないでしょうか?
40
+ わざわざすべてのタームを取得しなくても、投稿0件のタームだけ抜き出す方法はないでしょうか?
41
+
42
+ [追記]
43
+ 本質問を作成当初、0件だったときの処理をvar_dumpとしていましたが、正しくはwp_delete_termです。
44
+ すべてのタームが入った配列をvar_dumpしてもメモリリークとはならず、wp_delete_termのときに発生していたと思われます。

4

誤字

2018/09/13 10:42

投稿

muro
muro

スコア99

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,7 @@
19
19
  投稿0件のタームも含むという設定ならhide_emptyでできるのですが、0件だけという引数がわかりませんでした。
20
20
  よって、いったんすべてのタームを取得してから、それぞれのカウントを調べて、0件だったらアクションを実行する、という流れに変えました。
21
21
  しかし、タームも投稿数も何千件も存在するせいか、「Allowed memory size of 268435456 bytes exhausted (tried to allocate 466944 bytes) in /var/www/html/wp-includes/functions.php on line 3743」というエラーを起こしてしまいました。
22
- 一気にやるとメモリバーするのかと思って、100件ずつ処理するようにもしてみましたが、それでも同じエラーになってしまいます。
22
+ 一気にやるとメモリするのかと思って、100件ずつ処理するようにもしてみましたが、それでも同じエラーになってしまいます。
23
23
 
24
24
  ```php
25
25
  $ids = get_terms("hogehoge", [
@@ -35,6 +35,6 @@
35
35
  ```
36
36
 
37
37
  次に、上記のようにタームのidだけの配列を取得して、その配列でforeachする方法に変えてみました。
38
- すると、いくつかの投稿0件のタームは取得できたのですが、途中で相変わらずメモリバーが発生してしまいました。
38
+ すると、いくつかの投稿0件のタームは取得できたのですが、途中で相変わらずメモリが発生してしまいました。
39
39
 
40
40
  わざわざすべてのタームを取得しなくても、投稿0件のタームだけ抜き出す方法はないでしょうか?

3

誤字

2018/09/13 07:53

投稿

muro
muro

スコア99

title CHANGED
File without changes
body CHANGED
@@ -22,14 +22,14 @@
22
22
  一気にやるとメモリオーバーするのかと思って、100件ずつ処理するようにもしてみましたが、それでも同じエラーになってしまいます。
23
23
 
24
24
  ```php
25
- $ids = get_terms(filter_input(INPUT_POST, "tax"), [
25
+ $ids = get_terms("hogehoge", [
26
26
  "hide_empty" => 0,
27
27
  "fields" => "ids",
28
28
  ]);
29
29
  foreach($ids as $term_id) {
30
- $term = get_term($term_id, filter_input(INPUT_POST, "tax"));
30
+ $term = get_term($term_id, "hogehoge");
31
31
  if($term->count === 0) {
32
- wp_delete_term($term_id, filter_input(INPUT_POST, "tax"));
32
+ var_dump($term);
33
33
  }
34
34
  }
35
35
  ```

2

文法の修正

2018/09/13 07:51

投稿

muro
muro

スコア99

title CHANGED
File without changes
body CHANGED
@@ -21,6 +21,7 @@
21
21
  しかし、タームも投稿数も何千件も存在するせいか、「Allowed memory size of 268435456 bytes exhausted (tried to allocate 466944 bytes) in /var/www/html/wp-includes/functions.php on line 3743」というエラーを起こしてしまいました。
22
22
  一気にやるとメモリオーバーするのかと思って、100件ずつ処理するようにもしてみましたが、それでも同じエラーになってしまいます。
23
23
 
24
+ ```php
24
25
  $ids = get_terms(filter_input(INPUT_POST, "tax"), [
25
26
  "hide_empty" => 0,
26
27
  "fields" => "ids",
@@ -31,6 +32,7 @@
31
32
  wp_delete_term($term_id, filter_input(INPUT_POST, "tax"));
32
33
  }
33
34
  }
35
+ ```
34
36
 
35
37
  次に、上記のようにタームのidだけの配列を取得して、その配列でforeachする方法に変えてみました。
36
38
  すると、いくつかの投稿0件のタームは取得できたのですが、途中で相変わらずメモリオーバーが発生してしまいました。

1

コードの追加

2018/09/13 07:50

投稿

muro
muro

スコア99

title CHANGED
File without changes
body CHANGED
@@ -21,4 +21,18 @@
21
21
  しかし、タームも投稿数も何千件も存在するせいか、「Allowed memory size of 268435456 bytes exhausted (tried to allocate 466944 bytes) in /var/www/html/wp-includes/functions.php on line 3743」というエラーを起こしてしまいました。
22
22
  一気にやるとメモリオーバーするのかと思って、100件ずつ処理するようにもしてみましたが、それでも同じエラーになってしまいます。
23
23
 
24
+ $ids = get_terms(filter_input(INPUT_POST, "tax"), [
25
+ "hide_empty" => 0,
26
+ "fields" => "ids",
27
+ ]);
28
+ foreach($ids as $term_id) {
29
+ $term = get_term($term_id, filter_input(INPUT_POST, "tax"));
30
+ if($term->count === 0) {
31
+ wp_delete_term($term_id, filter_input(INPUT_POST, "tax"));
32
+ }
33
+ }
34
+
35
+ 次に、上記のようにタームのidだけの配列を取得して、その配列でforeachする方法に変えてみました。
36
+ すると、いくつかの投稿0件のタームは取得できたのですが、途中で相変わらずメモリオーバーが発生してしまいました。
37
+
24
38
  わざわざすべてのタームを取得しなくても、投稿0件のタームだけ抜き出す方法はないでしょうか?