这是关于此问题的一些想法,但是请注意,这决不是一个最终的答案,因为可能有些事情我被忽略了,但这应该使您对潜在的难题有所了解。
是的,从技术上讲可能会有后果。
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
,这些术语的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
可能会造成很大的伤害,但我们无法根据我们自己的哲学来假设使用这些数据的方式。
另外,如备用答案中所述,分类列表表上显示的计数也不会更新。
实际上,在您推迟术语计数且请求结束之后,更新术语计数的唯一方法是手动调用wp_update_term_count($terms, $taxonomy)
或等待,直到有人通过分类法UI或以编程方式为给定分类法添加了术语。
值得深思。