Ось декілька думок щодо цього питання, але зауважте, що це аж ніяк не є переконливою відповіддю, оскільки, можливо, я пропустив деякі речі, однак це повинно дати вам уявлення про потенційні проблеми.
Так, технічно можуть бути наслідки.
Якщо дзвінок wp_defer_term_counting(true)
стає по-справжньому вигідним, коли, наприклад, ви виконуєте масову вставку в базу даних публікацій і присвоюєте умови кожному об'єкту в рамках процесу.
У такому випадку ви зробите наступне:
wp_defer_term_counting(true); //defer counting terms
//mass insertion or posts and assignment of terms here
wp_defer_term_counting(false); //count terms after completing business logic
Тепер у вашому випадку, якщо ви вставляєте лише одну посаду за один раз, відкладений підрахунок терміну все одно піде на користь вам, однак не зателефонувавши wp_defer_term_counting(false)
після того, як ваша операція могла б залишити вас та інші учасники запиту, якщо ви покладаєтесь на підрахунок терміна для будь-якої іншої логіки / обробки, умовної чи іншої.
Щоб пояснити далі, скажімо, що ви виконуєте наступне:
Припустимо, що у таксономії називається 3 терміни product_cat
, ідентифікатори для цих термінів - 1 (назва терміна A), 2 (назва терміна B) і 3 (назва терміна C) відповідно.
Кожен з перерахованих вище термінів вже має кількість термінів 5
(лише для прикладу).
Тоді це відбувається ...
wp_defer_term_counting(true); //defer counting terms
$post_id = wp_insert_post($data);
wp_set_object_terms($post_id, array(1, 2, 3), 'product_cat');
Потім пізніше у вашій логіці ви вирішите отримати термін, оскільки ви хочете оцінити кількість об'єктів, пов'язаних із цим терміном, і виконати якусь іншу дію на основі результату.
Отже, ти це робиш ...
$terms = get_the_terms($post_id, 'product_cat');
//let's just grab the first term object off the array of returned results
//for the sake of this example $terms[0] relates to term_id 1 (A)
echo $terms[0]->count; //result 5
//dump output of $terms above
array (
0 =>
WP_Term::__set_state(array(
'term_id' => 1,
'name' => 'A',
'slug' => 'a',
'term_group' => 0,
'term_taxonomy_id' => 1,
'taxonomy' => 'product_cat',
'description' => '',
'parent' => 0,
'count' => 5, //notice term count still equal to 5 instead of 6
'filter' => 'raw',
)),
)
У випадку нашого прикладу ми сказали, що в назві терміна A (term_id 1) вже є 5 об'єктів, пов'язаних з ним, в інших словах вже є кількість термінів 5.
Таким чином, ми очікуємо, що count
параметр поверненого об'єкта вище 6, але оскільки ви не телефонували wp_defer_term_counting(false)
після операції, кількість термінів не оновлювалось для застосованих термінів (терміни A, B або C).
Тому це наслідок дзвінка wp_defer_term_counting(true)
без дзвінка wp_defer_term_counting(false)
після операції.
Тепер питання, звичайно, чи впливає це на вас? Що робити, якщо у вас немає необхідності викликати get_the_terms
або виконувати якусь дію, яка витягує термін, де ви використовуєте count
значення для виконання якоїсь іншої операції? Ну в такому випадку чудово, для вас немає жодної проблеми .
Але ... що робити, якщо хтось інший підключений до set_object_terms
дії у wp_set_object_terms()
функції, і вони покладаються на те, що термін підрахунок є правильним? Тепер ви бачите, де можуть виникнути наслідки.
Що робити, якщо після припинення запиту виконується інший запит, який витягує термін таксономії та використовує count
майно у своїй діловій логіці? Це може бути проблемою.
Хоча це може здатися далеко непридуманим, що count
значення можуть завдати великої шкоди, але ми не можемо припустити, як такі дані будуть використовуватися на основі нашої власної філософії.
Також, як зазначено в альтернативній відповіді, також не буде оновлюватися підрахунок, показаний у таблиці списку таксономії.
Насправді єдиний спосіб оновити кількість термінів після того, як ви відкладете підрахунок термінів і ваш запит закінчився - це вручну зателефонувати wp_update_term_count($terms, $taxonomy)
або чекати, поки хтось додасть термін для даної таксономії або через інтерфейс таксономії, або програмно.
Їжа для роздумів.