Berikut adalah beberapa pemikiran tentang masalah ini, tetapi harap dicatat bahwa ini sama sekali bukan jawaban konklusif karena mungkin ada beberapa hal yang telah saya abaikan namun ini harus memberi Anda wawasan tentang potensi gotcha.
Ya, secara teknis mungkin ada konsekuensinya.
Di mana panggilan wp_defer_term_counting(true)
menjadi benar-benar bermanfaat adalah ketika misalnya Anda melakukan penyisipan massal ke database posting dan istilah yang ditetapkan untuk setiap objek sebagai bagian dari proses.
Dalam kasus seperti itu Anda akan melakukan hal berikut:
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
Sekarang dalam kasus Anda, jika Anda hanya memasukkan satu posting pada suatu waktu, maka menunda penghitungan jangka masih akan menguntungkan Anda namun dengan tidak menelepon wp_defer_term_counting(false)
setelah operasi Anda dapat meninggalkan Anda dan atau pihak lain yang terlibat dengan permintaan dalam ikatan jika Anda mengandalkan hitungan istilah untuk logika / pemrosesan lainnya, bersyarat atau sebaliknya.
Untuk menjelaskan lebih lanjut, katakanlah Anda melakukan hal berikut:
Anggaplah kita memiliki 3 istilah dalam taksonomi yang disebut product_cat
, ID untuk istilah-istilah tersebut adalah 1 (nama jangka A), 2 (nama term B) dan 3 (nama term C).
Masing-masing istilah di atas sudah memiliki hitungan istilah 5
(hanya untuk contoh).
Maka ini terjadi ...
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');
Kemudian nanti dalam logika Anda, Anda memutuskan untuk mengambil istilah karena Anda ingin menilai jumlah objek yang terkait dengan istilah itu dan melakukan beberapa tindakan lain berdasarkan hasilnya.
Jadi kamu melakukan ini ...
$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',
)),
)
Dalam kasus contoh kami, kami mengatakan bahwa istilah nama A (term_id 1) sudah memiliki 5 objek yang terkait dengannya, di kata lain sudah memiliki hitungan istilah 5.
Jadi kami berharap count
parameter pada objek yang dikembalikan di atas menjadi 6 tetapi karena Anda tidak menelepon wp_defer_term_counting(false)
setelah operasi Anda, jumlah istilah tidak diperbarui untuk istilah yang berlaku (istilah A, B atau C).
Karenanya itulah konsekuensi dari panggilan wp_defer_term_counting(true)
tanpa menelepon wp_defer_term_counting(false)
setelah operasi Anda.
Sekarang pertanyaannya tentu saja, apakah ini mempengaruhi Anda? Bagaimana jika Anda tidak perlu memanggil get_the_terms
atau melakukan beberapa tindakan yang mengambil istilah di mana Anda menggunakan count
nilai untuk melakukan beberapa operasi lain? Nah dalam hal itu hebat, tidak masalah bagi Anda .
Tapi ... bagaimana jika orang lain terpikat pada set_object_terms
tindakan dalam wp_set_object_terms()
fungsi dan mereka mengandalkan istilah yang benar? Sekarang Anda melihat di mana akibatnya bisa muncul.
Atau bagaimana jika setelah permintaan berakhir, permintaan lain dilakukan yang mengambil istilah taksonomi dan memanfaatkan count
properti dalam logika bisnis mereka? Itu bisa menjadi masalah.
Walaupun kedengarannya terlalu jauh bahwa count
nilai - nilai bisa sangat berbahaya, kami tidak dapat mengasumsikan cara data tersebut akan digunakan berdasarkan filosofi kami sendiri.
Juga seperti yang disebutkan dalam jawaban alternatif, hitungan seperti yang terlihat pada tabel daftar taksonomi juga tidak akan diperbarui.
Bahkan satu-satunya cara untuk memperbarui penghitungan jangka waktu setelah Anda menunda penghitungan jangka waktu dan permintaan Anda telah berakhir adalah dengan menelepon wp_update_term_count($terms, $taxonomy)
atau menunggu secara manual hingga seseorang menambahkan istilah untuk taksonomi yang diberikan baik melalui UI taksonomi atau melalui program.
Bahan pemikiran.
wp_update_term_count()
) secara manual sebelum menggunakan nilainya. Saya tidak tahu itu akan menjadi masalah.wp_update_term_count($terms, $taxonomy)
masing-masing, benar?wp_defer_term_counting(true)
, DO MASS INSERT kemudianwp_defer_term_counting(false)
. Satu-satunya alasan Anda akan meneleponwp_update_term_count()
langsung adalah jika Anda menyimpan term_ids dalam transient kemudian menunda penghitungan seluruhnya tetapi misalnya memadamkan permintaan AJAX di belakang layar, ambil transient kemudian panggil secara manualwp_update_term_count()
atau gunakan cron-job atau sejenisnya. Jika Anda berada dalam permintaan yang sama (sebelum eksekusi sepenuhnya berakhir) maka tetap memanggilwp_defer_term_counting(false)
panggilan diwp_update_term_count()
bawah tenda.Ini harus relatif aman sebagai operasi. Ini menunda penghitungan istilah yang muncul di halaman Edit Taksonomi. Jadi, sepertinya tidak akan ada konsekuensi serius.
sumber