Intereting Posts
header_image () с CSS Заголовок рубрики Need Category для ссылки на список категорий Как добавить класс в плагин только для сетевого сайта? Как добавить описание по умолчанию для загруженных файлов? Любые хорошие темы WordPress, совместимые с плагином BBPress? WordPress извлекает страницу архива вместо моего настраиваемого шаблона Добавить теги в «ожидающий» пост перед публикацией WordPress Multisite позволяет администратору сайта добавлять пользователя без подтверждения по электронной почте Как извлечь все идентификационные переменные из строки запроса? Как расшифровать следующий массив Проблема с невозможностью запуска hook_post Какие изменения необходимы для того, чтобы этот условный код работал на более глубоких уровнях? Замените атрибуты изображения для плагина lazyload (data-src) Скрыть определенные страницы / сообщения на wp-admin, показать пользовательский фильтр Добавить элемент в пользовательское меню TinyMCE

Как использовать 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' ); } 

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