Saya membuat pekerjaan cron yang berjalan di luar WordPress. Dari perspektif pengembangan, ini membuatnya sangat mudah untuk debug dan membuat skrip pembersihan atau pekerjaan cron, dengan hanya menjalankan perintah seperti berikut pada baris perintah:
php myfile.php
Masalah saya adalah WordPress entah bagaimana menunda semua output ... biasanya ketika Anda menjalankan file php seperti ini output dihasilkan di layar Anda secara real time.
Apakah ada yang tahu bagaimana mencegah WP dari menunda semua output sampai akhir pekerjaan? Mungkin beberapa parameter sederhana yang saya lewatkan saat menjalankan file PHP, atau semacam konstanta, tapi saya tidak yakin.
Dalam kode berikut, Anda akan mengharapkan penundaan 1 detik antara setiap keluaran, sebagai gantinya, saya saat ini mendapatkan semua informasi yang dicetak di akhir, sekaligus:
set_time_limit( 0 );
ini_set( "memory_limit", "64M" );
ob_start();
require_once( dirname( __FILE__ ) . '/wp-load.php' ); // you need to adjust this to your path
ob_end_clean();
global $wpdb;
$q = $wpdb->prepare ("SELECT * FROM wp_posts LIMIT 5");
$results = $wpdb->get_results ($q);
echo "found " . count ($results) . "\n";
foreach ($results as $post)
{
echo $post->post_title . "\n";
sleep(1);
}
echo "\n\ndone";
sumber
Jawaban:
Setelah beberapa pengujian memang, baik WP Super Cache dan W3 Total Cache tidak melepaskan buffer (atau mencegah buffer dirilis).
Menonaktifkan "penundaan keluaran" sederhana dan tergantung pada plugin caching yang terlibat.
WP Super Cache :
Ini harus ditambahkan setelah memasukkan
wp-load.php
, ini menghentikan setiap caching mati di jalurnya dan mengguyur buffer.W3 Total Cache :
Sama seperti di atas, panggilan setelah termasuk
wp-load.php
, mirip dengan apa yang Anda miliki di sana; harus bekerja dengan hanya pembilasan, W3 Total Cache memang mulai buffer, namun tampaknya tidak mencegah pembilasan itu sendiri. Dilihat dari cara output Anda masih di-cache dan pembilasan tidak bekerja, saya akan mengatakan Anda memiliki WP Super Cache, yang lebih agresif.Pastikan Anda tidak memulai buffer baru sebelum memasukkan
wp-load.php
, jika tidak Anda akan memiliki buffer dalam buffer (bufferception?), Dan harus menyiram dua kali atau lebih.sumber
wp_cache_disable()
khusus untuk WP Super Cache. Saya akan melihat W3 Total Cache untuk melihat bagaimana itu dapat dinonaktifkan dengan cara yang sama, menggunakanob_end_flush
bekerja untuk saya. Apa pengaturan dan versi W3 Total Cache Anda?Nonaktifkan semua plugin yang mungkin Anda miliki yang melakukan caching seluruh halaman. WP-Super-Cache, W3 Total Cache, dll.
WordPress tidak "menunda output". Tapi biasanya plugin caching halaman penuh. Ini karena mereka mencoba untuk mendapatkan output itu dan menyimpannya di suatu tempat, untuk penggunaan selanjutnya dalam melayani halaman. Dengan demikian, output halaman tertunda sampai akhir, di mana plugin dapat menyimpannya.
sumber