Voici quelques réflexions sur la question, mais veuillez noter que ce n'est en aucun cas une réponse concluante car il y a peut-être des choses que j'ai négligées, mais cela devrait vous donner un aperçu des pièges potentiels.
Oui, techniquement, cela pourrait avoir des conséquences.
Lorsque l'appel wp_defer_term_counting(true)
devient vraiment bénéfique, c'est par exemple lorsque vous effectuez une insertion en masse dans la base de données de publications et des termes attribués à chaque objet dans le cadre du processus.
Dans un tel cas, vous feriez ce qui suit:
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
Maintenant, dans votre cas, si vous n'insérez qu'un seul message à la fois, le report du comptage des termes vous sera néanmoins bénéfique en ne téléphonant pas wp_defer_term_counting(false)
après que votre opération pourrait vous laisser, ainsi que d'autres parties impliquées dans la demande, si vous comptez sur le nombre de termes pour toute autre logique / traitement, conditionnel ou autre.
Pour expliquer davantage, disons que vous procédez comme suit:
Supposons que nous ayons 3 termes dans une taxonomie appelée product_cat
, les ID de ces termes sont respectivement 1 (nom du terme A), 2 (nom du terme B) et 3 (nom du terme C).
Chacun des termes ci-dessus a déjà un nombre de termes de 5
(juste pour l'exemple).
Ensuite, cela se produit ...
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');
Plus tard dans votre logique, vous décidez de récupérer le terme car vous souhaitez évaluer la quantité d'objets associés à ce terme et effectuer une autre action en fonction du résultat.
Alors tu fais ça ...
$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',
)),
)
Dans le cas de notre exemple, nous avons dit que le nom de terme A (term_id 1) a déjà 5 objets associés, en d'autres termes a déjà un nombre de termes de 5.
Nous nous attendons donc à ce que le count
paramètre sur l'objet retourné ci-dessus soit 6, mais comme vous n'avez pas appelé wp_defer_term_counting(false)
après votre opération, le nombre de termes n'a pas été mis à jour pour les termes applicables (terme A, B ou C).
C'est donc la conséquence d'un appel wp_defer_term_counting(true)
sans appel wp_defer_term_counting(false)
après votre opération.
Maintenant, la question est bien sûr, cela vous affecte-t-il? Que faire si vous n'avez pas besoin d'appeler get_the_terms
ou d'effectuer une action qui récupère le terme où vous utilisez la count
valeur pour effectuer une autre opération? Eh bien dans ce cas , pas de problème pour vous .
Mais ... que se passe-t-il si quelqu'un d'autre est accroché à l' set_object_terms
action dans la wp_set_object_terms()
fonction et compte sur le fait que le nombre de termes est correct? Vous voyez maintenant où les conséquences pourraient survenir.
Ou que se passe-t-il si après la fin de la demande, une autre demande est exécutée qui récupère un terme de taxonomie et utilise le count
bien dans sa logique métier? Cela pourrait être un problème.
Bien qu'il puisse sembler farfelu que les count
valeurs puissent être très préjudiciables, nous ne pouvons pas supposer la manière dont ces données seront utilisées en fonction de notre propre philosophie.
De plus, comme mentionné dans la réponse alternative, le nombre indiqué dans le tableau de la liste de taxonomie ne sera pas mis à jour non plus.
En fait, la seule façon de mettre à jour le décompte des termes après avoir différé le décompte des termes et votre demande est terminée est d'appeler manuellement wp_update_term_count($terms, $taxonomy)
ou d'attendre que quelqu'un ajoute un terme pour la taxonomie donnée via l'interface utilisateur de la taxonomie ou par programme.
Nourriture pour la pensée.
wp_update_term_count()
) avant d'utiliser sa valeur. Je ne savais pas que ce serait le cas.wp_update_term_count($terms, $taxonomy)
à chacun, n'est-ce pas?wp_defer_term_counting(true)
, FAITES INSÉRER LA MASSE alorswp_defer_term_counting(false)
. La seule raison pour laquelle vous appelezwp_update_term_count()
directement est si vous avez stocké les term_ids dans un transitoire, puis différez entièrement le comptage, mais par exemple lancez une demande AJAX en arrière-plan, saisissez le transitoire puis appelez manuellementwp_update_term_count()
ou utilisez un cron-job ou similaire. Si vous êtes dans la même requête (avant l' exécution se termine complètement) puis en appelant leswp_defer_term_counting(false)
appelswp_update_term_count()
sous le capot de toute façon.Cela devrait être relativement sûr en tant qu'opération. Cela reporte le comptage des termes qui apparaît sur la page Modifier la taxonomie. Il ne semble donc pas qu'il y aurait de conséquences graves.
la source