นี่คือความคิดบางอย่างเกี่ยวกับปัญหานี้ แต่โปรดทราบว่านี่ไม่ได้เป็นคำตอบที่สรุปเพราะอาจมีบางสิ่งที่ฉันได้มองข้ามไป
ใช่ในทางเทคนิคอาจมีผลกระทบ
ในกรณีที่การโทร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 คำใน taxonomy ที่เรียกว่าproduct_cat
ID สำหรับคำเหล่านั้นคือ 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
ค่าอาจเป็นอันตรายมาก แต่เราไม่สามารถสรุปได้ว่าข้อมูลดังกล่าวจะถูกนำไปใช้บนพื้นฐานของปรัชญาของเราเองอย่างไร
เช่นเดียวกับที่กล่าวไว้ในคำตอบอื่นการนับตามที่เห็นในตารางรายการ taxonomy จะไม่ถูกอัพเดตเช่นกัน
ในความเป็นจริงวิธีเดียวที่จะอัปเดตการนับคำหลังจากที่คุณเลื่อนการนับคำและการร้องขอของคุณสิ้นสุดลงคือการโทรwp_update_term_count($terms, $taxonomy)
หรือรอด้วยตนเองจนกว่าจะมีคนเพิ่มคำสำหรับอนุกรมวิธานที่กำหนดโดยผ่าน UI taxonomy หรือโดยทางโปรแกรม
อาหารสมอง.