Dưới đây là một số suy nghĩ về vấn đề này, nhưng xin lưu ý rằng đây không phải là một câu trả lời có thể kết luận vì có thể có một số điều tôi đã bỏ qua tuy nhiên điều này sẽ cho bạn cái nhìn sâu sắc về các vấn đề tiềm năng.
Vâng, về mặt kỹ thuật có thể có hậu quả.
Trường hợp việc gọi wp_defer_term_counting(true)
trở nên thực sự có lợi là khi bạn thực hiện việc chèn hàng loạt vào cơ sở dữ liệu của các bài đăng và các thuật ngữ được gán cho từng đối tượng như một phần của quy trình.
Trong trường hợp như vậy, bạn sẽ làm như sau:
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
Bây giờ trong trường hợp của bạn, nếu bạn chỉ chèn một bài đăng tại một thời điểm, thì việc trì hoãn việc đếm thời hạn sẽ vẫn có lợi cho bạn tuy nhiên bằng cách không gọi wp_defer_term_counting(false)
sau khi hoạt động của bạn có thể khiến bạn và các bên khác liên quan đến yêu cầu bị ràng buộc nếu bạn dựa vào thuật ngữ cho bất kỳ logic / xử lý khác, có điều kiện hoặc cách khác.
Để giải thích thêm, giả sử bạn làm như sau:
Giả sử chúng ta có 3 thuật ngữ trong một phân loại được gọi product_cat
, ID cho các thuật ngữ đó lần lượt là 1 (tên hạn A), 2 (tên hạn B) và 3 (tên hạn C).
Mỗi thuật ngữ trên đã có số lượng thuật ngữ 5
(chỉ cho ví dụ).
Sau đó, điều này xảy ra ...
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');
Sau đó, trong logic của bạn, bạn quyết định tìm nạp thuật ngữ vì bạn muốn đánh giá số lượng đối tượng được liên kết với thuật ngữ đó và thực hiện một số hành động khác dựa trên kết quả.
Vì vậy, bạn làm điều này ...
$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',
)),
)
Trong trường hợp ví dụ của chúng tôi, chúng tôi đã nói rằng tên thuật ngữ A (term_id 1) đã có 5 đối tượng được liên kết với nó, trong các từ khác đã có số hạng là 5.
Vì vậy, chúng tôi hy vọng count
tham số trên đối tượng được trả lại ở trên là 6 nhưng vì bạn không gọi wp_defer_term_counting(false)
sau thao tác của mình, nên số lượng thuật ngữ không được cập nhật cho các thuật ngữ áp dụng (thuật ngữ A, B hoặc C).
Do đó, đó là hậu quả của việc gọi wp_defer_term_counting(true)
mà không gọi wp_defer_term_counting(false)
sau khi hoạt động.
Bây giờ câu hỏi là tất nhiên, điều này có ảnh hưởng đến bạn? Điều gì xảy ra nếu bạn không có nhu cầu gọi get_the_terms
hoặc thực hiện một số hành động truy xuất thuật ngữ mà bạn sử dụng count
giá trị để thực hiện một số thao tác khác? Vâng, trong trường hợp tuyệt vời, không có vấn đề cho bạn .
Nhưng ... điều gì sẽ xảy ra nếu người khác bị cuốn vào set_object_terms
hành động trong wp_set_object_terms()
hàm và họ đang dựa vào số thuật ngữ là chính xác? Bây giờ bạn thấy nơi hậu quả có thể phát sinh.
Hoặc nếu sau khi yêu cầu kết thúc, một yêu cầu khác được thực hiện lấy ra một thuật ngữ phân loại và sử dụng count
tài sản trong logic kinh doanh của họ thì sao? Đó có thể là một vấn đề.
Mặc dù nghe có vẻ xa vời rằng count
các giá trị có thể gây hại rất nhiều, chúng ta không thể cho rằng cách dữ liệu đó sẽ được sử dụng dựa trên triết lý của chính chúng ta.
Cũng như được đề cập trong câu trả lời thay thế, số đếm như đã thấy trên bảng danh sách phân loại cũng sẽ không được cập nhật.
Trên thực tế, cách duy nhất để cập nhật số lượng thuật ngữ sau khi bạn trì hoãn việc đếm thời hạn và yêu cầu của bạn đã kết thúc là gọi thủ công wp_update_term_count($terms, $taxonomy)
hoặc đợi cho đến khi ai đó thêm một thuật ngữ cho phân loại cụ thể thông qua giao diện người dùng phân loại hoặc lập trình.
Thức ăn cho suy nghĩ.