2013-07-08 13 views
6

Kiedy zaplanuję wydarzenie u góry głównego pliku wtyczki (plugin.php), cron zostanie dodany do opcji wp_options cron.wp_schedule_event() nie działa w ramach funkcji aktywacji klasy

wp_schedule_event(time() + 10, 'hourly', 'this_is_my_action');

Działa to dobrze, dodaje nową crona. Ale kiedy próbuję użyć tej samej funkcji w mojej funkcji aktywacji w klasie wtyczki, to nie działa.

Wewnątrz plugin.php mam:

$plugin = new My_Plugin(__FILE__); 
$plugin->initialize(); 

klasa Wewnątrz My_Plugin mam:

class My_Plugin{ 

    function __construct($plugin_file){ 
     $this->plugin_file = $plugin_file; 
    } 

    function initialize(){ 
     register_activation_hook($this->plugin_file, array($this, 'register_activation_hook')); 
    } 

    function register_activation_hook() 
    { 
     $this->log('Scheduling action.'); 
     wp_schedule_event(time() + 10, 'hourly', 'this_is_my_action'); 
    } 

    function log($message){ 
     /*...*/ 
    } 

} 

Dziennik zostanie zapisany do kiedy włączyć wtyczkę, ale cron nie jest dodawany do baza danych Wordpress. Jakieś pomysły, dlaczego?

+0

Funkcje te są dokładnie takie same? –

+0

tak, dodaje cron do mojego głównego pliku wtyczki, nawet jeśli akcja nie istnieje. ale to nie działa w funkcji aktywacji. – user2103849

Odpowiedz

-1

Spróbuj tego:

class My_Plugin{ 

    function __construct($plugin_file){ 
     $this->plugin_file = $plugin_file; 
    } 

    function initialize(){ 
     register_activation_hook($this->plugin_file, array($this, 'register_activation_hook')); 
    } 

    function register_activation_hook() 
    { 
     $this->log('Scheduling action.'); 
     wp_schedule_event(time() + 10, 'hourly', array($this,'this_is_my_action')); 
    } 

    function this_is_my_action(){ 
    //do 
    } 

    function log($message){ 
    } 

} 

Trzeba dodać array($this,'name_function') z harmonogramem.

+1

Nie można użyć 'tablica ($ this, 'this_is_my_action')' w 'wp_schedule_event'. – kel

2

Trzeba zdefiniować Ci akcję zarejestrowaną zaplanowanego zdarzenia:

class My_Plugin{ 

function __construct($plugin_file){ 
    $this->plugin_file = $plugin_file; 
} 

function initialize(){ 
    register_activation_hook($this->plugin_file, array($this, 'register_activation_hook'));   
    add_action('this_is_my_action', array($this, 'do_it'); 
} 

function register_activation_hook() 
{ 
    if (!wp_next_scheduled('this_is_my_action')) { 
     $this->log('Scheduling action.'); 
     wp_schedule_event(time() + 10, 'hourly', 'this_is_my_action'); 
    } 
} 

function this_is_my_action(){ 
//do 
} 

function log($message){ 
} 

function do_it() { 
    // This is your scheduled event 
} 

} 
Powiązane problemy