Aqui estão algumas reflexões sobre o assunto, mas observe que essa não é de forma alguma uma resposta conclusiva, pois pode haver algumas coisas que eu negligenciei, no entanto, isso deve lhe dar uma visão das possíveis pegadinhas.
Sim, tecnicamente pode haver consequências.
Onde a chamada wp_defer_term_counting(true)
se torna realmente benéfica é quando, por exemplo, você está executando uma inserção em massa no banco de dados de postagens e termos atribuídos a cada objeto como parte do processo.
Nesse caso, você faria o seguinte:
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
Agora, no seu caso, se você estiver inserindo apenas uma postagem de cada vez, adiar a contagem de termos ainda o beneficiará, mas não ligará wp_defer_term_counting(false)
depois que sua operação puder deixar você e outras partes envolvidas com a solicitação em um vínculo se você confiar no contagem de termos para qualquer outra lógica / processamento, condicional ou não.
Para explicar melhor, digamos que você faça o seguinte:
Suponha que tenhamos 3 termos em uma taxonomia chamada product_cat
, os IDs para esses termos são 1 (nome do termo A), 2 (nome do termo B) e 3 (nome do termo C), respectivamente.
Cada um dos termos acima já possui uma contagem de termos 5
(apenas para o exemplo).
Então isso acontece ...
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');
Posteriormente, em sua lógica, você decide buscar o termo porque deseja avaliar a quantidade de objetos associados a esse termo e executar alguma outra ação com base no resultado.
Então você faz isso ...
$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',
)),
)
No caso do nosso exemplo, dissemos que o nome do termo A (term_id 1) já possui 5 objetos associados, ou seja, já possui uma contagem de termos 5.
Portanto, esperamos que o count
parâmetro no objeto retornado acima seja 6, mas como você não ligou wp_defer_term_counting(false)
após a operação, as contagens de termos não foram atualizadas para os termos aplicáveis (termos A, B ou C).
Portanto, essa é a consequência de ligar wp_defer_term_counting(true)
sem ligar wp_defer_term_counting(false)
após a operação.
Agora, a pergunta é obviamente: isso afeta você? E se você não precisar chamar get_the_terms
ou executar alguma ação que recupere o termo em que você usa o count
valor para executar alguma outra operação? Bem, nesse caso , ótimo, não há problema para você .
Mas ... e se alguém estiver ligado à set_object_terms
ação na wp_set_object_terms()
função e confiar que o termo contagem está correto? Agora você vê onde as consequências podem surgir.
Ou, se depois que a solicitação for encerrada, outra solicitação é executada que recupera um termo de taxonomia e faz uso da count
propriedade em sua lógica de negócios? Isso pode ser um problema.
Embora possa parecer absurdo que os count
valores possam causar muito dano, não podemos assumir a maneira como esses dados serão usados com base em nossa própria filosofia.
Também conforme mencionado na resposta alternativa, a contagem conforme vista na tabela da lista de taxonomia também não será atualizada.
De fato, a única maneira de atualizar as contagens de termos após adiar a contagem de termos e sua solicitação terminar é ligar wp_update_term_count($terms, $taxonomy)
ou aguardar manualmente até que alguém adicione um termo para a taxonomia especificada, via interface de taxonomia ou programaticamente.
Alimento para o pensamento.
wp_update_term_count()
) antes de usar seu valor. Eu não tinha ideia de que seria o caso.wp_update_term_count($terms, $taxonomy)
cada um deles, correto?wp_defer_term_counting(true)
, INSERIR EM MASSA entãowp_defer_term_counting(false)
. O único motivo pelo qual você ligariawp_update_term_count()
diretamente é se você armazenou os term_ids em um transitório e adiou a contagem inteiramente, mas, por exemplo, ative uma solicitação AJAX nos bastidores, pegue o transitório e chame manualmentewp_update_term_count()
ou use um cron-job ou similar. Se você estiver na mesma solicitação (antes que a execução termine totalmente), faça aswp_defer_term_counting(false)
chamadas dewp_update_term_count()
qualquer maneira.Isso deve ser relativamente seguro como uma operação. Isso está adiando a contagem de termos que aparece na página Editar taxonomia. Portanto, não parece que haja consequências sérias.
fonte