在我的PHP代码中看不到错误,需要新鲜的眼睛


Can't see mistake in my PHP code, need fresh eyes

对于PHP经验丰富的人来说,这应该是小菜一碟。我的代码有问题& &;看了两天后,我还是看不出错误。

查看下面的更新!


  • 当设定的时间结束时,应该改变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多人没有注意到:">"面朝错误的方向。

当你很累的时候不要编程。

检查了一些文档(…),这一行看起来很可疑(循环指针改变了,没有返回任何东西):

$this_post = $unpublished_posts->the_post();

我想你是想要get_post()还是什么的,我就直接打:

wp_update_post(array('ID' => get_the_ID(), 'post_status' => 'pending'));

此函数将收集get_post(ID)的当前数据并合并两者。

我从来没有使用过Wordpress,所以没有任何方面的指导,但是你所描述的似乎是数据库可以而且应该能够使用事件轻松处理的东西。把Event想象成windows中的"计划任务"。

一个基本的例子,一个'事件'在数据库(mySql等)。你可能想看看这个
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;

更多信息请参阅参考

一个由事件调用的存储过程的基本示例。

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