Задания Wordpress PHP Cron
У меня есть плагин, который импортирует данные csv в таблицы wordpress. Он проходит через панель управления Wordpress, где вы вводите некоторые данные и нажимаете кнопку, чтобы выполнить его.
Я изменил плагин так, чтобы входные данные были статическими (каждый раз из одного и того же csv) и теперь все они находятся в одном php-файле. Я хочу запланировать задание Cron для выполнения этого сценария каждый час или около того.
Я попытался настроить его с помощью cPanel и прямого доступа к php-файлу, но он не работает (ничего отображается). Я считаю, что это связано с тем, что плагин использует функции WordPress, такие как wp_insert_post.
Как я могу запустить этот скрипт, как если бы он был запущен через панель управления wordpress, как запланированное событие?
Примечание: файл также содержит некоторые javascript.
3 answers
Вам нужно включить 2 файла, чтобы получить доступ к функциям администратора: Во-первых, wp-load.php . wp-load.php настраивает все и запускает wordpress. Однако вы вызываете эту функцию из папки плагина, внутри каталога содержимого (в отличие от каталога администратора), поэтому при вызове wp–load вы не будете находиться в разделе администратора и не получите доступ к этим функциям. С другой стороны, вам также не придется иметь дело с WordPress, заставляющим вас авторизоваться. Поскольку вам все еще нужны эти функции администратора, включите wp-admin/admin-functions.php . Это загружает административную часть и предоставляет вам доступ к функциям администратора – и вы готовы перейти
Вам следует использовать wp_schedule_event. Смотрите в кодексе WordPress здесь: http://codex.wordpress.org/Function_Reference/wp_schedule_event . Используйте что-то вроде этого:
register_activation_hook(__FILE__, 'my_activation');
add_action('my_hourly_event', 'do_this_hourly');
function my_activation() {
wp_schedule_event( time(), 'hourly', 'my_hourly_event');
}
function do_this_hourly() {
// do something every hour
}
Вы вполне можете вызвать PHP-файл внутри вашей функции do_this_hourly()
.
Принятый ответ хорошо сработал для меня. Я смоделировал это, и вот мои выводы. Это тот случай, когда вы можете использовать это решение вне сценария плагина. В принципе, вы можете запустить свой сервер с помощью заданий cron, используя собственные функции wordpress, как показано ниже. Вы можете создать файл на верхнем уровне вашего приложения WordPress, а затем include /wp-load.php;
в нем.
Это загружается в родной wordpress и позволяет вам вызывать класс, который вы можете определить как часть ваших обязательных плагинов. Тогда ваш хороший чтобы перейти к основным функциям wordpress, таким как $wpdb
и get_usermeta()
Теперь вы можете создать экземпляр своего класса с помощью $class_variable = new YourClass;
и оттуда вызывать функции класса. Самое замечательное в этом то, что вы можете планировать задания cron, как обычно, на своем сервере, и когда вы это делаете, ваша функция wordpress работает так же, как и внутри wordpress. Это означает, что вам не нужно поддерживать работу cron как часть плагина, который может быть полезен или не полезен в зависимости от того, что вы делаете до.