Saya telah menggunakan banyak situs ini untuk memecahkan masalah saya, tetapi kali ini saya tidak berhasil menemukan dan menjawab untuk masalah saya.
Saya mendapatkan dan loop tak terbatas saat menggunakan wp_update_post
di dalam fungsi yang dipanggil save_post
. Saya tahu bahwa ini adalah masalah umum, tetapi saya tidak tahu bagaimana cara menghindarinya.
Saya ingin menyimpan urutan posting saya (yang merupakan 'bagian' jenis posting). Jadi saya telah membuat kotak meta khusus yang berisi beberapa elemen html yang bisa diurutkan. Di setiap elemen ada tag input tersembunyi dengan name = 'sectionorder []'. Jadi ketika saya mengklik buttom standar WordPress 'Perbarui', sebuah array yang berisi semua ID posting (dalam urutan) dikirim melalui POST. Jadi di sini adalah kode tempat saya mengambil array, dan ingin menyimpan pesanan:
// Update section sort order
$sectionorder = $_POST['sectionorder'];
if (isset($sectionorder)) { // Avoid error if there is no sections added yet
foreach( $sectionorder as $no => $sectionID ) {
$post_update = array();
$post_update['ID'] = $sectionID;
$post_update['menu_order'] = $no;
wp_update_post( $post_update );
}
}
Tetapi masalahnya adalah itu memulai loop tak terbatas. Bagaimana saya menghindarinya? Mungkin saya bisa melakukannya dengan cara yang sama sekali berbeda?
Hargai bantuan Anda!
sumber
update_post_meta
fungsi yang terkait dengansave_post
apakah saya juga harus melepas dan membuat ulangupdate_post_meta
?update_post_meta
tidak akan (umumnya) menyebabkansave_post
dipicu.Saya belum memiliki reputasi untuk berkomentar, jadi saya menambahkan jawaban meskipun jawaban Stephen sangat bagus dan benar. Itu hanya tidak menangani contoh ketika Anda ingin menetapkan prioritas tindakan.
Jika Anda menetapkan prioritas saat menambahkan tindakan tetapi tidak menentukan prioritas saat Anda menghapusnya, Anda masih akan mendapatkan loop tak terbatas.
// Cara SALAH untuk menangani ini - mengarah ke loop tak terbatas
// Cara KANAN untuk menangani ini - dieksekusi hanya sekali
sumber
remove_action/add_action
.