2013-07-11 3 views
0

Я нашел скрипт, проверяющий статус URL-адреса. Теперь я пытаюсь интегрировать его с wordpress. Это код:Выполнять скрипт php ежедневно с помощью wordpress

<?php 
/* 
Plugin Name: checkOnline Status 
Version: 0.1 
*/ 

add_action('cO_cron_hook', 'CheckRemoteService'); 

if(!wp_next_scheduled('cO_cron_hook')) { 
wp_schedule_event(time(), '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'); 
} 

function CheckRemoteService($atts) { 
extract(shortcode_atts(array(
    'url' => 'http://', 
    'cache' => '600', // 60*10 (10 minutes) 
    'online' => 'Online', // Custom online msg 
    'offline' => 'Offline' // Custom online msg 
), $atts)); 

$CachedStatus = 'cstatus_' . $url; 
$cachedposts = get_transient($CachedStatus); 
if ($cachedposts !== false) { 
return $cachedposts; 
} else { 

// Sometimes its best to change to a custom agent message 
// so you know where requests are coming from. 

$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, 5); 
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 < 400) { 
    return $online; 
    } else { 
    return $offline; 
    } 

set_transient($CachedStatus, $return, $cache); 
return $return; 
} 
} 
add_shortcode('checkmyurl','CheckRemoteService'); 

?> 

Что я хочу - это запустить этот код только один раз в день. Как я могу заставить его не запускаться при обновлении или на странице, где я использую короткие коды? Мне нужно отображать статус около 50 сайтов, и загрузка занимает более 10 секунд. Извините за этот простой вопрос (я нообен), но я не могу найти решение. Спасибо.

EDIT. Разрешено с использованием http://wordpress.org/plugins/crony/

+0

Имя ['cO _ ** cron ** _ hook'] (https://en.wikipedia.org/wiki/Cron) - это подсказка. – PeeHaa

+0

Wordpress cron похоже произведение, функция планируется. Моя проблема заключается в том, чтобы избежать загрузки при входе на сайт и при обновлении страницы. Благодарю. –

ответ

1

Вы можете использовать wp_schedule_event() для планирования повторяющихся задач.

wp_schedule_event() (documentation):

Планирует крюк, который будет выполняться ядром WordPress действия на определенный интервал, указанный Вами. Действие будет инициироваться, когда кто-то посетит ваш сайт WordPress, если запланированное время прошло. См. API Plugin для списка перехватчиков.

Чтобы запланировать мероприятие в день, вы могли бы сделать что-то вроде этого:

function someFunc() { 
    wp_schedule_event(time(), 'daily', 'mydailyEventHook'); 
} 

Надеется, что это помогает!

+0

Этот блок выполнения скрипта, если я обновляю страницу? Благодарю. –

+0

Когда я обновляю страницу, где я использую 50 коротких кодов, чтобы получить статус 50 сайтов, скрипт всегда работает (занимает более 10 секунд). Поэтому мне нужно что-то, что блокирует этот скрипт для выполнения при посещении этой страницы или обновления. Запускается страница посещения пользователя и сценариев (более 10 секунд), страница обновления пользователя и сценарий запускаются снова. Пользователь должен видеть только результаты скрипта из cron. Благодарю. –

+0

Я решил использовать это: http://wordpress.org/plugins/crony/ –

Смежные вопросы