不久前我也做了类似的事情。我不确定删除帖子是否是一个好的解决方案,例如,也许你可以只将帖子状态更改为一个名为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 );