在我的 PHP 代码中看不到错误,需要新的眼睛
Can't see mistake in my PHP code, need fresh eyes
对于有 PHP 经验的人来说,这应该是小菜一碟。
我的代码有问题 & 在盯着/调整它 2 天后,现在我看不到错误了。
检查下面的更新!
- 这是假设在设定的时间结束后更改 post 状态
($draft_to_deleted_delay).
问题: 未更改 post 状态
我认为问题出在状态更改代码或日期格式比较不兼容 但我不适合 PHP
还不确定。
这一切都包含在用 WP cron 调用的函数中 - cron 工作,用插件检查它。
没有错误!
所有代码:
// Covert date input
$draft_to_deleted_delay = '00-00-00-00-10-00'; //YY-MM-DD-HH-MM-SS <-- year-month-day-hour-minute-second
$draft_to_deleted_delay = explode('-', $draft_to_deleted_delay);
$draft_to_deleted_delay = new DateInterval(
'P'.$draft_to_deleted_delay[0].'Y'.
$draft_to_deleted_delay[1].'M'.
$draft_to_deleted_delay[2].'D'.
'T'.$draft_to_deleted_delay[3].'H'.
$draft_to_deleted_delay[4].'M'.
$draft_to_deleted_delay[5].'S'
);
// Get current date
$now = new DateTime();
// Get all the unpublished posts
$unpublished_posts = new WP_Query(array(
'posts_per_page' => -1,
'post_type' => 'post',
'meta_key' => 'draftDate', //This value is saved as strftime('%F %T') when post gets status "draft"
'post_status' => 'draft'
));
while($unpublished_posts->have_posts()) {
$unpublished_posts->the_post();
$draft = get_post_meta(get_the_ID(), 'draftDate', true);
if(!empty($draft)) {
// Date comparison
$dt = new DateTime($draft);
$dt->add($draft_to_deleted_delay);
if($dt < $now) {
// Expiration date reached, change to any status, "pending" in this example
wp_update_post(array('ID' => get_the_ID(), 'post_status' => 'pending'));
}
}
}
更新:
现在一切正常,代码已更新!
- 这不起作用的主要原因是 40 多人没有注意到:“>”面向错误的方向。
- 另外post状态更改错误。
永远不要在你很累的时候编程。
我从未使用过 Wordpress/与 Wordpress 合作过,因此无法提供任何方面的指导 - 但您所描述的似乎是数据库可以而且应该能够使用事件轻松处理的内容。
将事件想象成 windows 中的 'scheduled task'。
数据库中 'Event' 的基本示例(mySql 等)。
您可能想要 look at this
create event `evUpdateDraftStatus`
on schedule
every '1' day_hour starts '2015-08-22'
on completion preserve
enable
comment 'every 1 hour(s) call a stored procedure that processes Drafts.'
do call spUpdateDrafts()
要在数据库中启用事件 运行 此命令:SET GLOBAL event_scheduler = ON;
See the reference for more info
事件调用的存储过程的基本示例。
create procedure `spUpdateDrafts`( IN `param_days` INT )
language sql
not deterministic
contains sql
sql security definer
comment 'Update drafts'
begin
/* Perform sql operations, for example: */
declare days integer default 0;
set @days=cast(param_days as unsigned);
update `table` set `draftstatus`=0
where `draftstatus`=1 and timestampdiff( day, `draft_created_date`, now() ) > @days;
end
检查了一些文档 (...),这一行看起来有问题(循环指针改变,return 什么都没有):
$this_post = $unpublished_posts->the_post();
我想你想要 get_post()
或某事。我会简单地调用:
wp_update_post(array('ID' => get_the_ID(), 'post_status' => 'pending'));
此函数将使用 get_post(ID)
收集当前数据并合并两者。
对于有 PHP 经验的人来说,这应该是小菜一碟。 我的代码有问题 & 在盯着/调整它 2 天后,现在我看不到错误了。
检查下面的更新!
- 这是假设在设定的时间结束后更改 post 状态 ($draft_to_deleted_delay).
问题: 未更改 post 状态
我认为问题出在状态更改代码或日期格式比较不兼容 但我不适合 PHP 还不确定。
这一切都包含在用 WP cron 调用的函数中 - cron 工作,用插件检查它。
没有错误!
所有代码:
// Covert date input
$draft_to_deleted_delay = '00-00-00-00-10-00'; //YY-MM-DD-HH-MM-SS <-- year-month-day-hour-minute-second
$draft_to_deleted_delay = explode('-', $draft_to_deleted_delay);
$draft_to_deleted_delay = new DateInterval(
'P'.$draft_to_deleted_delay[0].'Y'.
$draft_to_deleted_delay[1].'M'.
$draft_to_deleted_delay[2].'D'.
'T'.$draft_to_deleted_delay[3].'H'.
$draft_to_deleted_delay[4].'M'.
$draft_to_deleted_delay[5].'S'
);
// Get current date
$now = new DateTime();
// Get all the unpublished posts
$unpublished_posts = new WP_Query(array(
'posts_per_page' => -1,
'post_type' => 'post',
'meta_key' => 'draftDate', //This value is saved as strftime('%F %T') when post gets status "draft"
'post_status' => 'draft'
));
while($unpublished_posts->have_posts()) {
$unpublished_posts->the_post();
$draft = get_post_meta(get_the_ID(), 'draftDate', true);
if(!empty($draft)) {
// Date comparison
$dt = new DateTime($draft);
$dt->add($draft_to_deleted_delay);
if($dt < $now) {
// Expiration date reached, change to any status, "pending" in this example
wp_update_post(array('ID' => get_the_ID(), 'post_status' => 'pending'));
}
}
}
更新:
现在一切正常,代码已更新!
- 这不起作用的主要原因是 40 多人没有注意到:“>”面向错误的方向。
- 另外post状态更改错误。
永远不要在你很累的时候编程。
我从未使用过 Wordpress/与 Wordpress 合作过,因此无法提供任何方面的指导 - 但您所描述的似乎是数据库可以而且应该能够使用事件轻松处理的内容。 将事件想象成 windows 中的 'scheduled task'。
数据库中 'Event' 的基本示例(mySql 等)。 您可能想要 look at this
create event `evUpdateDraftStatus`
on schedule
every '1' day_hour starts '2015-08-22'
on completion preserve
enable
comment 'every 1 hour(s) call a stored procedure that processes Drafts.'
do call spUpdateDrafts()
要在数据库中启用事件 运行 此命令:SET GLOBAL event_scheduler = ON;
See the reference for more info
事件调用的存储过程的基本示例。
create procedure `spUpdateDrafts`( IN `param_days` INT )
language sql
not deterministic
contains sql
sql security definer
comment 'Update drafts'
begin
/* Perform sql operations, for example: */
declare days integer default 0;
set @days=cast(param_days as unsigned);
update `table` set `draftstatus`=0
where `draftstatus`=1 and timestampdiff( day, `draft_created_date`, now() ) > @days;
end
检查了一些文档 (...),这一行看起来有问题(循环指针改变,return 什么都没有):
$this_post = $unpublished_posts->the_post();
我想你想要 get_post()
或某事。我会简单地调用:
wp_update_post(array('ID' => get_the_ID(), 'post_status' => 'pending'));
此函数将使用 get_post(ID)
收集当前数据并合并两者。