Я создаю работу cron, которая работает за пределами WordPress. С точки зрения разработки, это действительно облегчает отладку и создание сценариев очистки или заданий cron, просто выполнив команду, подобную следующей в командной строке:
php myfile.php
Моя проблема заключается в том, что WordPress каким-то образом задерживает весь вывод ... обычно, когда вы запускаете такие файлы php, вывод генерируется на вашем экране в режиме реального времени.
Кто-нибудь знает, как предотвратить задержку WP всех выходных данных до конца задания? Вероятно, это какой-то простой параметр, который я пропускаю при запуске файла PHP, или какая-то константа, но я не уверен.
В следующем коде вы ожидаете задержку в 1 секунду между каждым выводом, вместо этого я в настоящее время получаю всю информацию, напечатанную в конце, сразу:
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";
источник
Ответы:
После некоторого тестирования и WP Super Cache, и W3 Total Cache не освобождают буфер (или препятствуют его освобождению).
Отключить «задержку вывода» просто и зависит от используемого плагина кэширования.
WP Super Cache :
Это должно быть добавлено после включения
wp-load.php
, это останавливает любое кэширование мертвых в его дорожках и очищает буфер.W3 Total Cache :
Как и выше, звоните после включения
wp-load.php
, аналогично тому, что у вас там; должен работать только с очисткой, W3 Total Cache запускает буфер, однако, по-видимому, он не предотвращает его очистку. Судя по тому, что ваш вывод все еще кэшируется и сбрасывание не работает, я бы сказал, что у вас WP Super Cache, который более агрессивен.Убедитесь, что вы не запускаете новый буфер перед включением
wp-load.php
, иначе у вас будет буфер внутри буфера (bufferception?), И вам придется очищать его дважды или более.источник
wp_cache_disable()
это особенность WP Super Cache. Я посмотрю на W3 Total Cache, чтобы увидеть, как его можно отключить аналогичным образом, используяob_end_flush
работал для меня. Каковы ваши настройки и версия W3 Total Cache?Отключите все плагины, которые у вас могут быть, которые кэшируют всю страницу. WP-Super-Cache, W3 Total Cache и т. Д.
WordPress не «задерживает вывод». Но плагины кэширования всей страницы обычно делают. Это потому, что они пытаются получить этот вывод и сохранить его где-нибудь, для дальнейшего использования при обслуживании страницы. Таким образом, вывод страницы задерживается до конца, где плагин может его кешировать.
источник