Como fazer um script php executado apenas com wp-cron

Eu tenho um script php que executa uma function e cria um arquivo xml com resultados. Quero que esse script seja executado apenas uma vez por dia e estou usando o wordpress cron para fazer isso. O problema é que este script sempre é executado em todas as páginas carregadas e isso é ruim porque leva mais de 30 seg para completar. Como posso parar isso sempre é executado e fazê-lo funcionar apenas com wp-cron? Eu li sobre o cronjob, mas meu host não possui esse recurso. Este é o código que eu uso no topo do meu arquivo php:

add_action( 'my_cron_hook', 'myfunction' ); if( !wp_next_scheduled( 'my_cron_hook' ) ) { wp_schedule_event( time(), 'daily', 'my_cron_hook' ); } register_deactivation_hook( __FILE__, 'my_deactivate' ); function my_deactivate() { $timestamp = wp_next_scheduled( 'my_cron_hook' ); wp_unschedule_event($timestamp, 'my_cron_hook' ); } 

Quero que o script seja executado diariamente e sempre em segundo plano, não deve afetar a navegação do usuário. Obrigado.

Editar.

Este é todo o script de código:

  add_action( 'cO_cron_hook', 'remoteHeader' ); if( !wp_next_scheduled( 'cO_cron_hook' ) ) { wp_schedule_event( time() + 24 * 60 * 60, 'daily', 'cO_cron_hook' ); } register_deactivation_hook( __FILE__, 'bl_deactivate' ); function bl_deactivate() { $timestamp = wp_next_scheduled( 'cO_cron_hook' ); wp_unschedule_event($timestamp, 'cO_cron_hook' ); } set_time_limit(300); function remoteHeader($url){ $online = 'online'; $offline = 'offline'; $agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,$url ); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch,CURLOPT_VERBOSE,false); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch,CURLOPT_SSLVERSION,3); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE); curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if($httpcode >= 200 && $httpcode createElement("xml"); /* append it to the document created */ $xmlRoot = $domtree->appendChild($xmlRoot); $currentSite = $domtree->createElement("site"); $currentSite = $xmlRoot->appendChild($currentSite); /* you should enclose the following two lines in a cicle */ $site = remoteHeader("http://google.com/"); $currentTrack->appendChild($domtree->createElement('google',$site)); $site2 = remoteHeader("http://wordpress.com/"); $currentTrack->appendChild($domtree->createElement('wordpress',$site2)); ... header("Content-Type: text/plain"); /* get the xml printed */ echo $domtree->save('mytest.xml') 

Solutions Collecting From Web of "Como fazer um script php executado apenas com wp-cron"

WP_Cron não é um verdadeiro cron scheduler.

O que faz é agendar events, marcar quando eles devem ser executados e aguardar o tráfego da página. Quando o site é carregado, verifica se algumas dessas tarefas precisam ser executadas (ou seja, o tempo que foram agendadas para ter passado) e as executa. Então, você vê, o sistema cron do WordPress é totalmente dependente do tráfego do seu site.

No entanto, ele não executa o código agendado no mesmo processo. As mensagens do WordPress voltam para si (ou seja, carregam outra cópia do WordPress para uma solicitação separada) e executa o código lá. Se você estiver vendo um atraso no carregamento da página devido a este script em execução, isso significa que você tem algo mais acontecendo.

Além disso, sua chamada para wp_schedule_event está errada. O primeiro parâmetro deve ser o tempo que deseja que a tarefa seja executada … não “agora” se você quiser que as coisas sejam executadas uma vez por dia. Reescreva isso para:

 wp_schedule_event( time() + 24 * 60 * 60, 'daily', 'my_cron_hook' ); 

Finalmente, se este script PHP pode ser executado fora do WordPress, você seria muito mais adequado para agendar um evento regular no crontab do seu sistema. O administrador do sistema ou o host podem ajudar com isso diretamente.

Se o seu host não permitirá que você tenha access a tarefas do cron, você pode tentar um dos serviços de serviço externo grátis do cron (eu usei um desses, mas agora esqueci qual deles)

https://www.google.com/search?q=web+cron+free

… se o seu script tiver uma URL pública. Eu adicionei um código hashed ao meu script para garantir que ninguém poderia simplesmente chamar o script diretamente com a chave.