我有一个自定义数据库表,名为wp_wcpl_user_packages 其中包含以下列:
id | user_id | product_id | ..irrelevant columns... | package_limit | package_timestamp | package_dduration
示例行为:
1 | 1 | 44 | .... | 3 | 2015-09-08 22:18:44 | 90
我需要的是每小时运行一次cron作业,并设置
package_limit
到
-1 如果
NOW 以及
package_timestamp 是>=的
package_dduration.
因此,我有以下两个功能:
function get_wp_cron_get_expired_packages() {
global $wpdb;
$packages = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wcpl_user_packages");
$expired = array();
foreach ($packages as $key => $package) {
$retArray = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}wcpl_user_packages
WHERE DATEDIFF(NOW(), \'package_timestamp\') >= \'package_dduration\'
AND id = {$package->id}
AND \'package_limit\' <> \'-1\'");
if($retArray != null) {
array_push($expired, $retArray);
}
}
return $expired;
}
以及
function wp_cron_jobs_docleanup() {
global $wpdb;
wp_cron_jobs_logMessages(\'wp cron job started at \'. current_time(\'timestamp\'));
$packages = get_wp_cron_get_expired_packages();
wp_cron_jobs_logMessages(\'Found \'.count($packages).\' to expire.\');
if(!empty($packages)) {
foreach ($packages as $key => $package) {
$wpdb->update("{$wpdb->prefix}wcpl_user_packages",
array(
\'package_limit\' => \'-1\',
),
array(
\'user_id\' => $package->user_id,
\'id\' => $package->id,
),
array( \'%d\' ),
array( \'%d\', \'%d\' )
);
wp_cron_jobs_logMessages($package);
}
return true;
} else {
wp_cron_jobs_logMessages(\'No Packages found to mark as expired, Exiting!\');
}
}
日志总是说它没有找到任何要过期的包。因此,cron运行良好,但上述函数之一可能有问题。
我认为它肯定是在检查是否有任何包必须过期的函数中。我尝试了各种不同的方法来写WHERE部分,但从来没有得到任何运气。
求你了,如果有人有哪怕是最细微的暗示,这对我都会非常有帮助。此外,如果您认为这是一个PHP问题,那么不要关闭它,只需给我一个提示或其他东西。