Estou criando um trabalho cron que é executado fora do WordPress. Do ponto de vista do desenvolvimento, isso facilita muito a depuração e a criação de scripts de limpeza ou tarefas cron, executando apenas um comando como o seguinte na linha de comando:
php myfile.php
Meu problema é que o WordPress atrasa de alguma forma toda a saída ... normalmente, quando você executa arquivos php como este, a saída é gerada na tela em tempo real.
Alguém sabe como impedir o WP de atrasar toda a saída até o final do trabalho? Provavelmente é um parâmetro simples que estou ausente ao executar o arquivo PHP ou uma constante de algum tipo, mas não tenho certeza.
No código a seguir, você esperaria um atraso de 1 segundo entre cada saída. Em vez disso, recebo todas as informações impressas no final de uma só vez:
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";
fonte
Respostas:
Após alguns testes, o WP Super Cache e o W3 Total Cache não liberam o buffer (ou impedem que o buffer seja liberado).
Desativar o "atraso de saída" é simples e depende do plug-in de cache envolvido.
Super cache WP :
Isso deve ser adicionado após a inclusão
wp-load.php
, isso interrompe qualquer cache morto em suas trilhas e libera o buffer.Cache Total W3 :
O mesmo que acima, ligue depois de incluir
wp-load.php
, da mesma forma que você tem lá; deve funcionar apenas com a descarga, o W3 Total Cache inicia o buffer, mas não parece impedir a descarga por si só. A julgar pela maneira como sua saída ainda é armazenada em cache e a liberação não funciona, eu diria que você tem o WP Super Cache, que é mais agressivo.Certifique-se de não iniciar um novo buffer antes de incluir
wp-load.php
, caso contrário, você terá um buffer dentro de um buffer (bufferception?) E precisará liberar duas ou mais vezes.fonte
wp_cache_disable()
é particular ao WP Super Cache. Vou examinar o W3 Total Cache para ver como ele pode ser desabilitado de maneira semelhante, usando oob_end_flush
trabalhou para mim. Quais são as configurações e a versão do cache total do W3?Desative todos os plug-ins que você tiver para fazer o cache da página inteira. WP-Super-Cache, W3 Total Cache, etc.
O WordPress não "atrasa a saída". Mas os plugins de cache de página inteira costumam funcionar. Isso ocorre porque eles estão tentando obter essa saída e salvá-la em algum lugar, para uso posterior em servir a página. Assim, a saída da página está atrasada até o final, onde o plugin pode armazená-la em cache.
fonte