所以我做到了:-)
有一件事我真的不喜欢做,但目前没有其他选择:来自服务器的CronJob
此PHP脚本在单个(无模板)文件中运行:
$xmlData = file_get_contents(get_bloginfo(\'template_directory\').\'/import/external_db.xml\');
// read XML data string
$xml = simplexml_load_string($xmlData) or die("ERROR: Cannot create SimpleXML object");
foreach( $xml as $user )
{
$name = $user->firstname;
$code = $user->code;
$email = $user->email;
$jobdescription = $user->jobdescription;
$salary = $user->salary;
$sql = "INSERT INTO xxx_employees (name, code, email, jobdescription, salary) VALUES (\'$name\', \'$code\', \'$email\', \'$jobdescription\', \'$salary\')";
mysql_query($sql) or die (mysql_error());
echo \'Success\';
}
该脚本所做的唯一事情是从服务器上的某个位置获取XML文件,并将其转储到我在数据库中创建的表中。
这需要每小时运行一次。所以在我的函数中。php:
add_action( \'wp\', \'prefix_setup_schedule\' );
/**
* On an early action hook, check if the hook is scheduled - if not, schedule it.
*/
function prefix_setup_schedule() {
if ( ! wp_next_scheduled( \'prefix_hourly_event\' ) ) {
wp_schedule_event( time(), \'hourly\', \'prefix_hourly_event\');
}
}
add_action( \'prefix_hourly_event\', \'prefix_do_this_hourly\' );
/**
* On the scheduled action hook, run a function.
*/
function prefix_do_this_hourly() {
//wp_mail( \'[email protected]\', \'Auto mail every hour\', \'Automatic scheduled email from WordPress.\');
}
这个所谓的“CronJob”每小时都会在数据库中转储一次(我需要添加一个函数,在输入新数据之前清除数据库)。唯一的问题是,除非有加载页面的请求,否则WordPress不会每小时都这样做。如果没有访客,则不会更新。
为了解决这个问题,我在服务器上创建了一个CronJob,每小时执行一个请求,以便更新数据库。
我希望我能找到一个解决方案来替换服务器上的CronJob。
但就是这样。现在,我需要将XML上载函数执行到functions.php
并确保在使用新数据填充数据库之前刷新数据库。
@Rarst:感谢WP Cron提醒。非常有用。