2017-06-03 6 views
0

私は、ブラウザタブを開いて閉じないと、wp_schedule関数がバックグラウンドでajaxのようなcronを実行することを理解しています。だから、なぜ私の機能はそれを働かせることができませんでしたか?なぜWordPressのwp_schedule関数が機能しないのですか?

私のcoumputer時間= my wordpress設定時間= GMT時間をphp.iniに変更しました。しかしそれはまだ動作しません、私のコードは以下のとおりです。私はそれをwordpressプラグインの中に入れました。だから私は何をしなければならないのですか?

class CronTest { 

function __construct() { 
    add_action('init', array ($this, 'g_order_sync')); 
    add_action('ga_order_syn', array ($this, 'sync_order')); 
} 

// init 

public function g_order_sync() { 
    try{ 
     if (! wp_next_scheduled('ga_order_syn')) { 
      wp_schedule_event( time() + 10, null, 'ga_order_syn'); 
     } 
    } 
    catch(Exception $ex) 
    { 
     echo "<p>The error: " . $e->getMessage() . "</p>"; //display error 
    } 
} 

// cron job 

public function sync_order() { 
    $content = time() . ": some text here"; 
    $this->_write_content ($content); 
} 

// write content 

private function _write_content($content = '') { 
    $path = $_SERVER[ 'DOCUMENT_ROOT' ] . "/myText.txt"; 
    if(is_writable($path)) { 
     $original = file_get_contents($path); 
     $original .= PHP_EOL . $content; 
     $fp = fopen($path, "wb"); 
     fwrite($fp, $original); 
     fclose($fp); 
    } else { 
     // log error here 
    } 
} 
} 

// must initialize the cron class 
$cron_test = new CronTest(); 

答えて

0

ワードプレスは、誰かがサイトを訪問したときにのみcronタスクを持っているかどうかをチェックします。次のイベントを2分で実行するように設定して、次回のサイトへのアクセスが10時間になると、イベントは10時間(直ちにアクセス)で発生しますが、2分後には発生しません。

これはajaxと似ていないため、ブラウザを開いておく必要はありません。 WP_Cronはバックグラウンドで実行されます。

サイトに頻繁にアクセスする場合は、計画されたイベントが選択された時間に実行されることが保証されます。あなたのコードが間違っている何

UPDATE

wp_schedule_eventと呼ばれています。

最初の引数は、最初のイベント実行の時刻を定義することです。これは、UNIXエポック(1970年1月1日)の初めから数ミリ秒です。あなたは何をしているのですか、今から10ミリ秒後にイベントの初回を行うように指示します。ところで問題はないが、WordPressはできるだけ早くそれをやるが、time()+ 10はまったく意味がない。最初のパラメータとしてtime()をそのまま使用します。

第2引数をnullにすることはできません。イベントの再発を指定する必要があります。 WordPressには、時間ごと、twicedaily、毎日の3つの定義済みの間隔があります。それらのどれが適切でない場合は、特別なフックにセットアップすることがあります。

add_filter('cron_schedules', 'example_add_cron_interval'); 

function example_add_cron_interval($schedules) { 
    $schedules['ten_seconds'] = array(
     'interval' => 10, 
     'display' => esc_html__('Every Ten Seconds'), 
    ); 

    return $schedules; 
} 

この例では、wp_schedule_eventで使用することができ間隔ten_secondsを設定します。最後に、あなたの呼び出しは次のようになります:

wp_schedule_event( time(), 'ten_seconds', 'ga_order_syn'); 
+0

私のコードには何が間違っていますか? –

+0

私は答えを広げました。 –

+0

ねえ、あなたは成功した。しかし、もし私が削除した場合、私のコードはちょうどwok:if(!wp_next_scheduled( 'wpwhosonline_update')){。しかし、私はそれを削除しない場合、それは重複した複数の時間を実行します。 –

関連する問題