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

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

对于有 PHP 经验的人来说,这应该是小菜一碟。 我的代码有问题 & 在盯着/调整它 2 天后,现在我看不到错误了。

检查下面的更新!



所有代码:

// 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'));
        }
    }
}

更新:

现在一切正常,代码已更新!

永远不要在你很累的时候编程。

我从未使用过 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) 收集当前数据并合并两者。