php
1$offset = 0; 2do { 3 $terms = get_terms("hogehoge", [ 4 "hide_empty" => 0, 5 "number" => 100, 6 "offset" => $offset, 7 ]); 8 foreach($terms as $term) { 9 if($term->count == 0) { 10 wp_delete_term($term->term_id, "hogehoge"); 11 } 12 } 13 $offset += 100; 14} while (!empty($terms));
投稿数が0件のタームのみをget_termsで抽出したいと考えています。
投稿0件のタームも含むという設定ならhide_emptyでできるのですが、0件だけという引数がわかりませんでした。
よって、いったんすべてのタームを取得してから、それぞれのカウントを調べて、0件だったらアクションを実行する、という流れに変えました。
しかし、タームも投稿数も何千件も存在するせいか、「Allowed memory size of 268435456 bytes exhausted (tried to allocate 466944 bytes) in /var/www/html/wp-includes/functions.php on line 3743」というエラーを起こしてしまいました。
一気にやるとメモリリークするのかと思って、100件ずつ処理するようにもしてみましたが、それでも同じエラーになってしまいます。
php
1$ids = get_terms("hogehoge", [ 2 "hide_empty" => 0, 3 "fields" => "ids", 4]); 5foreach($ids as $term_id) { 6 $term = get_term($term_id, "hogehoge"); 7 if($term->count === 0) { 8 wp_delete_term($term->term_id, "hogehoge"); 9 } 10}
次に、上記のようにタームのidだけの配列を取得して、その配列でforeachする方法に変えてみました。
すると、いくつかの投稿0件のタームは取得できたのですが、途中で相変わらずメモリリークが発生してしまいました。
わざわざすべてのタームを取得しなくても、投稿0件のタームだけ抜き出す方法はないでしょうか?
[追記]
本質問を作成当初、0件だったときの処理をvar_dumpとしていましたが、正しくはwp_delete_termです。
すべてのタームが入った配列をvar_dumpしてもメモリリークとはならず、wp_delete_termのときに発生していたと思われます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/14 11:15