因此,我们使用Bedrock帮助编写产品代码,我需要构建一个通用类来处理自定义cronjobs。
这是cronjob的基础类:
<?php
namespace namespace\to\the\class;
abstract class CronHelper extends AbstractHelper {
/** Declare all attributes and other methods */
/**
* Setup the custom cronjob
*/
protected function init() {
$this->setAlias(DEFAULT_CRON_ALIAS);
$this->setInterval(DEFAULT_CRON_INTERVAL);
$this->setDisplay(DEFAULT_CRON_DISPLAY);
}
/**
* Start the cronjob
*/
public function start() {
add_filter('cron_schedules', array($this,'customInterval'));
add_action($this->getAlias(), array($this,'runner'));
if (! wp_next_scheduled($this->getAlias())) {
wp_schedule_event(time(), "{$this->getAlias()}_interval", $this->getAlias());
}
}
/**
* The custom interval builder
*
* @return array The custom interval setup
*/
public function customInterval() {
$scheduler["{$this->getAlias()}_interval"] = array('interval' => $this->getInterval(),'display' => $this->getDisplay());
return $scheduler;
}
/**
* The scheduler implementation function
*/
protected abstract function runner();
}
你们应该知道什么:
start()
这是CronHelper类的一种实现:
<?php
namespace namespace\to\the\class;
class TestCron extends CronHelper {
protected function runner() {
// Try to print something on the nginx's error logs
error_log('Running inside the class TestCron');
// Create a random file just for testing
$file = fopen('./cronjob.txt', 'w');
fwrite($file, sprintf('Hello World [%d]', time()));
fclose($file);
}
}
这就是我实例化所有内容的方式,请记住,这段代码每次都会执行:
<?php
/** A lot of code above ... */
// Start the Test Cronjob
TestCron::getInstance()->setAlias('test_cron')
->setDisplay('Test Cronjob')
->setInterval(5) // Fire every 5 seconds
->start();
/** A lot of code below ... */
每次我加载页面并浏览网站时,都不会发生任何事情。我想知道我在做什么错?!
感谢您的帮助!
答案 0 :(得分:0)
我终于发现我的代码发生了什么。我只是将其放在此处,以备将来类似的疑问。
解决方案是:为protected
的wannabe函数使用public
方法,而不是使用runner()
方法。