Hier sind einige Gedanken zu diesem Thema, aber bitte beachten Sie, dass dies keineswegs eine schlüssige Antwort ist, da es einige Dinge gibt, die ich übersehen habe. Dies sollte Ihnen jedoch einen Einblick in die möglichen Fallstricke geben.
Ja, technisch könnte es Konsequenzen geben.
Der Aufruf ist wp_defer_term_counting(true)
wirklich nützlich, wenn Sie beispielsweise im Rahmen des Prozesses eine Masseneinfügung in die Datenbank mit Beiträgen und zugewiesenen Begriffen für jedes Objekt durchführen.
In einem solchen Fall würden Sie Folgendes tun:
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
Wenn Sie in Ihrem Fall immer nur einen Beitrag gleichzeitig einfügen, profitieren Sie immer noch davon, wenn Sie die Laufzeitzählung verschieben, wenn Sie nicht anrufen, wp_defer_term_counting(false)
nachdem Ihre Operation Sie und andere an der Anfrage beteiligte Parteien in einer Bindung zurücklassen könnte, wenn Sie sich auf die verlassen Termanzahl für jede andere Logik / Verarbeitung, bedingt oder anderweitig.
Nehmen wir zur weiteren Erläuterung Folgendes an:
Angenommen, wir haben 3 Begriffe innerhalb einer Taxonomie product_cat
, die aufgerufen werden. Die IDs für diese Begriffe sind 1 (Begriffsname A), 2 (Begriffsname B) und 3 (Begriffsname C).
Jeder der oben genannten Begriffe hat bereits eine Laufzeitanzahl von 5
(nur für das Beispiel).
Dann passiert das ...
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');
Später in Ihrer Logik entscheiden Sie sich dann, den Begriff abzurufen, da Sie die Anzahl der mit diesem Begriff verknüpften Objekte bewerten und basierend auf dem Ergebnis eine andere Aktion ausführen möchten.
Also machst du das ...
$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',
)),
)
In unserem Beispiel haben wir gesagt, dass dem Termnamen A (term_id 1) bereits 5 Objekte zugeordnet sind, mit anderen Worten bereits eine Termanzahl von 5.
Wir würden also erwarten, dass der count
Parameter für das oben zurückgegebene Objekt 6 ist. Da Sie jedoch wp_defer_term_counting(false)
nach Ihrer Operation nicht aufgerufen haben, wurden die Begriffszählungen für die zutreffenden Begriffe (Begriff A, B oder C) nicht aktualisiert.
Daher ist dies die Folge eines Anrufs wp_defer_term_counting(true)
ohne Anruf wp_defer_term_counting(false)
nach Ihrer Operation.
Nun stellt sich natürlich die Frage, ob Sie davon betroffen sind. Was ist, wenn Sie keine get_the_terms
Aktion aufrufen oder ausführen müssen, die den Begriff abruft, bei dem Sie den count
Wert verwenden, um eine andere Operation auszuführen? Na in diesem Fall super, kein Problem für dich .
Aber ... was ist, wenn jemand anderes an der set_object_terms
Aktion in der wp_set_object_terms()
Funktion festhält und sich darauf verlässt, dass die Anzahl der Begriffe korrekt ist? Jetzt sehen Sie, wo die Konsequenzen entstehen könnten.
Oder was ist, wenn nach Beendigung der Anforderung eine andere Anforderung ausgeführt wird, die einen Taxonomiebegriff abruft und die count
Eigenschaft in ihrer Geschäftslogik verwendet? Das könnte ein Problem sein.
Es mag weit hergeholt klingen, dass count
Werte viel Schaden anrichten könnten, aber wir können nicht davon ausgehen, wie solche Daten basierend auf unserer eigenen Philosophie verwendet werden.
Wie in der alternativen Antwort erwähnt, wird auch die Anzahl in der Taxonomielistentabelle nicht aktualisiert.
Die einzige Möglichkeit, die Anzahl der Begriffe zu aktualisieren, nachdem Sie die Anzahl der Begriffe verschoben und Ihre Anfrage beendet haben, besteht darin, manuell anzurufen wp_update_term_count($terms, $taxonomy)
oder zu warten, bis jemand einen Begriff für die angegebene Taxonomie entweder über die Taxonomie-Benutzeroberfläche oder programmgesteuert hinzufügt.
Denkanstöße.
wp_update_term_count()
), bevor Sie den Wert verwenden. Ich hatte keine Ahnung, dass dies der Fall sein würde.wp_update_term_count($terms, $taxonomy)
jeden aufrufen , richtig?wp_defer_term_counting(true)
, DO MASS INSERT dannwp_defer_term_counting(false)
. Der einzige Grund, warum Siewp_update_term_count()
direkt aufrufen würden, besteht darin, dass Sie die term_ids in einem Transienten gespeichert und dann die Zählung vollständig verschoben haben, aber beispielsweise eine AJAX-Anforderung hinter den Kulissen auslösen, den Transienten abrufenwp_update_term_count()
und dann manuell einen Cron-Job oder ähnliches aufrufen oder verwenden. Wenn Sie sich in derselben Anfrage befinden (bevor die Ausführung vollständig beendet ist), rufen Sie trotzdemwp_defer_term_counting(false)
Anrufewp_update_term_count()
unter der Haube an.Dies sollte als Operation relativ sicher sein. Dadurch wird die Anzahl der Begriffe verschoben, die auf der Seite Taxonomie bearbeiten angezeigt werden. Es scheint also keine ernsthaften Konsequenzen zu geben.
quelle