İşte konuyla ilgili bazı düşünceler, ama lütfen bunun kesin bir cevap olmadığını unutmayın, göz ardı ettiğim bazı şeyler olabilir, ancak bu potansiyel gotchas hakkında bir fikir vermelidir.
Evet, teknik olarak sonuçları olabilir.
Çağrı nerede wp_defer_term_counting(true)
gerçekten faydalı olur, örneğin Eğer mesajların veri tabanında bir kütle ekleme performans ve işleminin bir parçası olarak, her nesneye tahsis koşullar zamandır.
Böyle bir durumda aşağıdakileri yaparsınız:
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
Şimdi sizin durumunuzda, bir seferde yalnızca bir gönderi ekliyorsanız, erteleme terimi sayımı yine de size fayda sağlayacaktır, ancak wp_defer_term_counting(false)
operasyonunuz sizi ve / veya talebe bağlı diğer tarafları, şartlı veya başka herhangi bir diğer mantık / işlem için terim sayısı.
Daha fazla açıklamak için, aşağıdakileri yaptığınızı varsayalım:
Bir sınıflandırma dahilinde 3 terimimiz olduğunu varsayalım product_cat
, bu terimlerin kimliklerinin sırasıyla 1 (terim adı A), 2 (terim adı B) ve 3 (terim adı C) olduğunu varsayalım .
Yukarıdaki terimlerin her birinin zaten bir terim sayısı vardır 5
(sadece örnek için).
Sonra bu olur ...
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');
Daha sonra mantığınızda, terimi getirmeye karar verirsiniz, çünkü o terimle ilişkili nesnelerin miktarını değerlendirmek ve sonuca göre başka bir işlem yapmak istersiniz.
Yani bunu yapıyorsun ...
$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',
)),
)
Örneğimizde, A (term_id 1) teriminin zaten kendisiyle ilişkilendirilmiş 5 nesnesi olduğunu, başka bir deyişle zaten 5 terim sayısına sahip olduğunu söyledik.
Bu nedenle count
, yukarıdaki döndürülen nesne üzerindeki parametrenin 6 olmasını bekleriz, ancak wp_defer_term_counting(false)
işleminizden sonra aramadıysanız, terim sayıları geçerli terimler için (A, B veya C terimi) güncellenmedi.
Bu nedenle ameliyattan sonra arama yapmadan arama yapmanın sonucudur .wp_defer_term_counting(true)
wp_defer_term_counting(false)
Şimdi soru elbette, bu sizi etkiliyor mu? Başka bir işlemi gerçekleştirmek get_the_terms
için count
değeri kullandığınız terimi geri alan bir eylemi çağırmanız veya gerçekleştirmeniz gerekmiyorsa ne olur ? Bu durumda harika, senin için sorun değil .
Ama ... ya bir başkası fonksiyonda set_object_terms
eyleme bağlıysa wp_set_object_terms()
ve terim sayımının doğru olmasına güveniyorsa ne olacak? Şimdi sonuçların nerede ortaya çıkabileceğini görüyorsunuz.
Veya istek sona erdikten sonra, bir sınıflandırma terimini alan ve count
mülkü iş mantığında kullanan başka bir istek gerçekleştirilirse ne olur ? Bu bir sorun olabilir.
count
Değerlerin çok zarar verebileceği çok zor gibi görünse de , bu tür verilerin kendi felsefemize dayanarak nasıl kullanılacağını varsayamayız.
Ayrıca alternatif cevapta belirtildiği gibi, sınıflandırma listesi tablosunda görülen sayım da güncellenmeyecektir.
Aslında, terim sayımını erteledikten ve isteğiniz sona erdikten sonra terim sayılarını güncellemenin tek yolu, wp_update_term_count($terms, $taxonomy)
birisi taksonomi kullanıcı arabirimi aracılığıyla veya programlı olarak belirli bir sınıflandırma için bir terim ekleyene kadar manuel olarak aramak veya beklemektir.
Düşünce için yiyecek.