Aquí hay algunas ideas sobre el tema, pero tenga en cuenta que esta no es una respuesta concluyente, ya que puede haber algunas cosas que he pasado por alto, sin embargo, esto debería darle una idea de las posibles trampas.
Sí, técnicamente podría haber consecuencias.
Cuando las llamadas se wp_defer_term_counting(true)
vuelven realmente beneficiosas es cuando, por ejemplo, está realizando una inserción masiva en la base de datos de publicaciones y términos asignados a cada objeto como parte del proceso.
En tal caso, haría lo siguiente:
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
Ahora, en su caso, si solo está insertando una publicación a la vez, aplazar el conteo de términos aún lo beneficiará, sin embargo, al no llamar wp_defer_term_counting(false)
después de que su operación pueda dejarlo a usted u otras partes involucradas con la solicitud en un aprieto si confía en el recuento de términos para cualquier otra lógica / procesamiento, condicional o de otro tipo.
Para explicar más, digamos que haces lo siguiente:
Supongamos que tenemos 3 términos dentro de una taxonomía llamada product_cat
, los ID para esos términos son 1 (nombre del término A), 2 (nombre del término B) y 3 (nombre del término C) respectivamente.
Cada uno de los términos anteriores ya tiene un recuento de términos 5
(solo para el ejemplo).
Entonces esto sucede ...
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');
Luego, más adelante en su lógica, decide buscar el término porque desea evaluar la cantidad de objetos asociados con ese término y realizar alguna otra acción basada en el resultado.
Entonces haces esto ...
$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',
)),
)
En el caso de nuestro ejemplo, dijimos que el nombre del término A (term_id 1) ya tiene 5 objetos asociados, en otras palabras, ya tiene un recuento de términos de 5.
Por lo tanto, esperaríamos que el count
parámetro en el objeto devuelto anterior sea 6, pero debido a que no llamó wp_defer_term_counting(false)
después de su operación, los recuentos de términos no se actualizaron para los términos aplicables (término A, B o C).
Por lo tanto, esa es la consecuencia de llamar wp_defer_term_counting(true)
sin llamar wp_defer_term_counting(false)
después de su operación.
Ahora la pregunta es, por supuesto, ¿esto te afecta? ¿Qué sucede si no tiene necesidad de llamar get_the_terms
o realizar alguna acción que recupere el término donde utiliza el count
valor para realizar alguna otra operación? Bueno, en ese caso genial, no hay problema para ti .
Pero ... ¿qué pasa si alguien más está enganchado a la set_object_terms
acción en la wp_set_object_terms()
función y confía en que el término cuenta es correcto? Ahora ves dónde podrían surgir las consecuencias.
¿O qué pasa si después de que la solicitud ha finalizado, se realiza otra solicitud que recupera un término de taxonomía y hace uso de la count
propiedad en su lógica comercial? Eso podría ser un problema.
Si bien puede count
parecer descabellado que los valores puedan ser muy perjudiciales, no podemos asumir la forma en que dichos datos se utilizarán según nuestra propia filosofía.
Además, como se menciona en la respuesta alternativa, el recuento como se ve en la tabla de la lista de taxonomía tampoco se actualizará.
De hecho, la única forma de actualizar los recuentos de términos después de diferir el recuento de términos y su solicitud ha finalizado es llamar manualmente wp_update_term_count($terms, $taxonomy)
o esperar hasta que alguien agregue un término para la taxonomía dada a través de la interfaz de usuario de la taxonomía o mediante programación.
Comida para el pensamiento.
wp_update_term_count()
. Ej. ) Antes de usar su valor. No tenía idea de que ese sería el caso.wp_update_term_count($terms, $taxonomy)
a cada uno, ¿correcto?wp_defer_term_counting(true)
, INSERTO EN MASA entonceswp_defer_term_counting(false)
. La única razón por la que llamaríawp_update_term_count()
directamente es si almacenó los term_ids en un transitorio y luego difiere el conteo por completo, pero por ejemplo dispara una solicitud AJAX detrás de escena, toma el transitorio y luego llama manualmentewp_update_term_count()
o usa un trabajo cron o similar. Si está en la misma solicitud (antes de que la ejecución finalice por completo), llame a laswp_defer_term_counting(false)
llamadaswp_update_term_count()
bajo el capó de todos modos.Esto debería ser relativamente seguro como una operación. Esto difiere el recuento de términos que aparece en la página Editar taxonomía. Por lo tanto, no parece que haya consecuencias graves.
fuente