1

URL のステータスをチェックするスクリプトを見つけました。今、私はワードプレスと統合しようとしています。これはコードです:

<?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');

?>

私が望むのは、このコードを 1 日 1 回だけ実行することです。ショートコードを使用しているページを更新またはアクセスしたときに実行されないようにするにはどうすればよいですか? 約 50 のサイトの表示ステータスが必要で、ページの読み込みに 10 秒以上かかります。この単純な質問で申し訳ありませんが(私はこれに慣れていません)、解決策が見つかりません。ありがとう。

編集。http://wordpress.org/plugins/crony/を使用して解決

4

1 に答える 1

2

wp_schedule_event()定期的なタスクをスケジュールするために使用できます。

wp_schedule_event()(ドキュメント):

ユーザーが指定した特定の間隔で WordPress アクション コアによって実行されるフックをスケジュールします。スケジュールされた時間が経過した場合、誰かが WordPress サイトにアクセスすると、アクションがトリガーされます。フックのリストについては、プラグイン API を参照してください。

毎日イベントをスケジュールするには、次のようにします。

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

お役に立てれば!

于 2013-07-11T18:04:35.193 に答える