在某个日期之后过期(删除)的帖子

时间:2014-07-06 作者:user2506619

我正在从头创建一个优惠券网站。我已经在互联网上查看了许多代码示例,但没有找到任何可行的方法,因为我的需求几乎没有什么不同。

我需要帮助创建一个到期函数,该函数将自动删除“优惠券”(post\\U类型)。

作为优惠券网站,所有优惠券都是批量导入的,因此在特定导入(会话)中,到期日格式(例如2014年12月1日、2014年12月1日或2014年12月1日)因优惠券而异。当日期格式不同时,这就产生了一个问题,而且它从来都不一样。

自定义字段为“expiry\\u date”,它将存储日期。

有没有人能很好地解决这个问题?

2 个回复
最合适的回答,由SO网友:passatgt 整理而成

不久前我也做了类似的事情。我不确定删除帖子是否是一个好的解决方案,例如,也许你可以只将帖子状态更改为一个名为Expired的自定义状态。但举个例子,下面的代码将删除该帖子。

首先创建每日cron作业:

add_action( \'wp\', \'delete_expired_coupons_daily\' );
function delete_expired_coupons_daily() {
    if ( ! wp_next_scheduled( \'delete_expired_coupons\' ) ) {
        wp_schedule_event( time(), \'daily\', \'delete_expired_coupons\');
    }
}
add_action( \'delete_expired_coupons\', \'delete_expired_coupons_callback\' );
然后使用delete\\u expired\\u Couples\\u回调函数循环浏览优惠券帖子,检查日期,必要时删除:

function delete_expired_coupons_callback() {
    $args = array(
        \'post_type\' => \'coupon\',
        \'posts_per_page\' => -1
    );

    $coupons = new WP_Query($args);
    if ($coupons->have_posts()):
        while($coupons->have_posts()): $coupons->the_post();    

            $expiration_date = get_post_meta( get_the_ID(), \'expiry_date\', true );
            $expiration_date_time = strtotime($expiration_date);

            if ($expiration_date_time < time()) {
                wp_delete_post(get_the_ID());
                //Use wp_delete_post(get_the_ID(),true) to delete the post from the trash too.                  
            }

        endwhile;
    endif;
}
两条建议:导入优惠券时,可以进行strotime转换,因此数据库中的日期格式是相同的。通过这种方式,您不需要遍历所有帖子来检查过期日期,您可以使用自定义查询来检查其是否过期,因此日常作业将运行得更快:

    $args = array(
        \'post_type\' => \'coupon\',
        \'posts_per_page\' => -1,
        \'meta_query\' => array(
            array(
               \'key\' => \'expiry_date\',
               \'value\' => time(),
               \'compare\' => \'<\'
            )
        )
    );
您可以创建过期帖子状态,只需禁用这些帖子而不删除它们:http://codex.wordpress.org/Function_Reference/register_post_status

您可以这样更改post状态,而不是wp\\U delete\\U post功能:

// Update post
$my_post = array();
$my_post[\'ID\'] = get_the_ID();
$my_post[\'post_status\'] = \'expired\';

// Update the post into the database
wp_update_post( $my_post );

SO网友:AlexG

我建议在Excel中打开CSV,使用格式将所有日期转换为相同的格式,并在使用此导入之前保存CSV。这应该避免任何发展努力。

结束

相关推荐

If is_single in functions.php

我希望删除wpautop筛选器仅对我博客中的帖子起作用。因为在某些页面,我需要autop,而在某些页面,我需要它不在那里。我使用以下规则,这是在我的主题函数中。php:remove_filter( \'the_content\', \'wpautop\' ); 因为我只想在博客上看到它,所以我在考虑if语句,我在Wordpress中搜索了条件标记页面,发现我可以使用is\\u single。但它不起作用。这是我现在使用的代码。if(is_single() ){ remove_f