Как использовать wp_schedule_event в классе?

Это первый раз, когда я попробовал метод OOP для написания приложения. Я пока не совсем понимаю. В настоящее время у меня есть этот крюк cron:

if( !wp_next_scheduled( 'my_cron_hook' ) ) { //schedule the event to run daily wp_schedule_event( current_time( 'timestamp' ), 'daily', 'my_cron_hook' ); } add_action('my_cron_hook',array($this,'do_daily_job')); 

Кажется, что он не может использоваться, if внутри класса напрямую. Должен ли я поставить весь код выше в функцию __construct() ?

Кроме того, я нашел это в документации WordPress wp_schedule_event .

 function my_activation() { if ( !wp_next_scheduled( 'my_hourly_event' ) ) { wp_schedule_event( current_time( 'timestamp' ), 'hourly', 'my_hourly_event'); } } add_action('wp', 'my_activation'); 

Какая доза 'wp' здесь означает? Я никогда не видел этого в API-интерфейсе. Должен ли я завернуть свой код cron (выше) в функцию и поместить это действие «wp» в функцию __construct() , как это?

 function __construct() { add_action('wp', array($this,'my_activation')); } function my_activation() { if( !wp_next_scheduled( 'my_cron_hook' ) ) { //schedule the event to run daily wp_schedule_event( current_time( 'timestamp' ), 'daily', 'my_cron_hook' ); } add_action('my_cron_hook',array($this,'do_daily_job')); } 

Solutions Collecting From Web of "Как использовать wp_schedule_event в классе?"

Добавьте действие вне определения вашего класса:

 add_action('my_unique_plugin_event_hook', array($this,'hook')); 

И затем используйте это в своем случае:

 wp_schedule_event(time(), 'daily', 'my_unique_plugin_event_hook'); 

Вы можете создать функцию в своем классе и вызвать hook в своем конструкторе. Код ниже, который похож на то, что вы показали. Если вы создадите это в плагине, вы можете создать экземпляр своего класса после активации и создать свое задание cron. В дополнение к приведенному ниже коду, вот хорошая ссылка на Cron Jobs в PHP Управление задачами Cron в PHP

 class My_Class { function __construct() { //Register ajax scripts add_action( 'admin_enqueue_scripts', array( $this, 'register_ajax_scripts' ) ); } /** * Registers and enqueues admin-specific JavaScript. */ public function register_ajax_scripts() { wp_enqueue_script ('test-ajax' , plugins_url( 'myPlugin/test-ajax.js' )); } 
  • PHP будет генерировать синтаксическую ошибку, если вы попытаетесь поместить if-statement непосредственно внутри класса – единственные вещи, которые могут идти между этими фигурными скобками, – это объявления переменных (например, public $foo ) и функции (например, function bar(){ /*stuff*/} ).

  • Совершенно нормально задавать задание из конструктора класса – или, действительно, любой другой функции в классе. Просто убедитесь, что вы фактически создаете экземпляр класса (и вызываете нужную функцию, если она не находится в конструкторе), чтобы добавить крюк.

  • Короче говоря, WP – это крючок, который запускается, когда загружается все, все сообщения загружаются и т. Д., Но до загрузки шаблонов.

Некоторые утверждают, что лучший способ зарегистрировать задание cron – это привязать его к ключу активации . Это крючок, который запускается только при первом включении плагина. В противном случае вы рискуете зарегистрировать одну и ту же работу более одного раза, что имеет очевидные недостатки. Это код кода, который вы включили, для проверки его еще не запланировано. Это один из способов сделать это, это другое.

Перед тем, как начнется основной класс (например, в вашем файле plugin.php базы данных с информацией заголовка вверху), ваш код должен выглядеть примерно так:

 register_activation_hook( __FILE__, '62565_activate'); function 62565_activate() { wp_schedule_event( current_time( 'timestamp' ), 'daily', 'my_cron_hook' ); } 

Очевидно, что если вы отключите и снова активируете плагин, это может вызвать проблемы.