Ich erstelle einen Cron-Job, der außerhalb von WordPress ausgeführt wird. Aus Entwicklungssicht macht es das Debuggen und Erstellen von Bereinigungsskripten oder Cron-Jobs wirklich einfach, indem Sie einfach einen Befehl wie den folgenden in der Befehlszeile ausführen:
php myfile.php
Mein Problem ist, dass WordPress irgendwie die gesamte Ausgabe verzögert ... normalerweise wird die Ausgabe auf Ihrem Bildschirm in Echtzeit generiert, wenn Sie PHP-Dateien wie diese ausführen.
Weiß jemand, wie man verhindert, dass WP die gesamte Ausgabe bis zum Ende des Jobs verzögert? Es ist wahrscheinlich ein einfacher Parameter, den ich beim Ausführen der PHP-Datei vermisse, oder eine Konstante, aber ich bin mir nicht sicher.
Im folgenden Code erwarten Sie eine Verzögerung von 1 Sekunde zwischen den einzelnen Ausgaben. Stattdessen werden derzeit alle Informationen am Ende auf einmal gedruckt:
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";
quelle
Antworten:
Nach einigen Tests geben sowohl der WP Super Cache als auch der W3 Total Cache den Puffer nicht frei (oder verhindern, dass der Puffer freigegeben wird).
Das Ausschalten der "Ausgangsverzögerung" ist einfach und hängt vom jeweiligen Caching-Plugin ab.
WP Super Cache :
Dies sollte nach dem
wp-load.php
Einfügen hinzugefügt werden. Dadurch wird das Caching in seinen Spuren gestoppt und der Puffer geleert.W3 Gesamt-Cache :
Rufen Sie wie oben an, nachdem
wp-load.php
Sie eingeschlossen haben, ähnlich wie Sie es dort haben. Sollte nur mit Leeren funktionieren, startet W3 Total Cache den Puffer, scheint jedoch das Leeren an sich nicht zu verhindern. Gemessen an der Art und Weise, wie Ihre Ausgabe immer noch zwischengespeichert ist und das Leeren nicht funktioniert, würde ich sagen, dass Sie WP Super Cache haben, der aggressiver ist.wp-load.php
Stellen Sie sicher, dass Sie vor dem Einfügen keinen neuen Puffer starten , da sich sonst ein Puffer in einem Puffer befindet (Bufferception?) Und zweimal oder öfter geleert werden muss.quelle
wp_cache_disable()
ist speziell für WP Super Cache. Ich werde in W3 Total Cache nachsehen, wie es auf ähnliche Weise deaktiviert werden kann, wenn esob_end_flush
für mich funktioniert. Was sind Ihre W3 Total Cache-Einstellungen und -Versionen?Deaktivieren Sie alle Plugins, die möglicherweise das Caching ganzer Seiten durchführen. WP-Super-Cache, W3-Gesamtcache usw.
WordPress "verzögert die Ausgabe nicht". Plugins zum Zwischenspeichern ganzer Seiten tun dies normalerweise. Dies liegt daran, dass sie versuchen, diese Ausgabe abzurufen und irgendwo zu speichern, um sie später für die Bereitstellung der Seite zu verwenden. Somit wird die Seitenausgabe bis zum Ende verzögert, wo das Plugin sie zwischenspeichern kann.
quelle