Here are some thoughts on the issue, but please note that this is by no means a conclusive answer as there may be some things I have overlooked however this should give you an insight to the potential gotchas.
<是的,从技术上讲可能会有后果。
何处呼叫wp_defer_term_counting(true)
例如,当您将大量插入到POST数据库中,并将术语作为过程的一部分分配给每个对象时,这才是真正有益的。
在这种情况下,您可以执行以下操作:
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)
如果您依赖术语count进行任何其他逻辑/处理(有条件或其他),则操作后可能会使您和/或与请求相关的其他各方陷入困境。
为了进一步解释,假设您执行以下操作:
假设我们在一个名为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\\u id 1)已经有5个与之关联的对象,换句话说,已经有5个术语计数。
所以我们希望count
上面返回的对象上的参数为6,但因为您没有调用wp_defer_term_counting(false)
操作后,未更新适用术语(术语A、B或C)的术语计数。
因此,这是consequence 调用的wp_defer_term_counting(true)
不打电话wp_defer_term_counting(false)
手术后。
现在的问题是,这对你有影响吗?如果你不需要打电话怎么办get_the_terms
或者执行一些操作,检索使用count
执行其他操作的值?那么在这种情况下great, no problem for you.
但是如果有人上钩了怎么办set_object_terms
中的操作wp_set_object_terms()
函数,并且它们依赖于术语计数是否正确?现在你看到了可能产生的后果。
或者,如果在请求终止后,执行另一个请求来检索分类术语并使用count
业务逻辑中的属性?这可能是个问题。
虽然这听起来有些牵强count
价值观可能会有很大的危害,我们不能根据自己的理念假设这些数据的使用方式。
此外,如备选答案中所述,分类列表中的计数也不会更新。
事实上,在延迟期限计数并且请求结束后,更新期限计数的唯一方法是手动调用wp_update_term_count($terms, $taxonomy)
或者等待,直到有人通过分类法UI或编程方式为给定的分类法添加一个术语。
值得深思。