如何在指定日期或特定天数后自动失效某作者的全部文章?
当然可以搞定这个需求!针对你用WP-Types搭建的分类信息站点,我整理了两个实用方案,不管你是有开发基础还是纯新手都能用上:
方案一:自定义代码实现(适合有一定开发基础的朋友)
这个方案灵活性最高,能精准控制过期规则:
第一步:给文章添加过期字段
先在WP-Types后台给你的自定义文章类型添加两个可选字段(选其中一个或者都加都可以):- 日期字段(比如命名为
expiration_date):用来设置固定的过期日期 - 数字字段(比如命名为
days_to_expire):用来设置发布后多少天过期
- 日期字段(比如命名为
第二步:编写定时处理函数
WordPress自带定时任务功能,我们可以写个函数每天检查一次,自动把符合条件的作者文章改成失效状态(比如草稿、私有)。把下面的代码放到你的主题functions.php文件或者自定义插件里:
// 注册每日定时事件 add_action('wp', 'setup_author_post_expiration_cron'); function setup_author_post_expiration_cron() { // 如果还没注册定时任务,就创建一个每天执行的事件 if (!wp_next_scheduled('expire_target_author_posts')) { wp_schedule_event(time(), 'daily', 'expire_target_author_posts'); } } // 核心过期处理逻辑 add_action('expire_target_author_posts', 'process_author_post_expiration'); function process_author_post_expiration() { // 替换成你要指定的作者ID $target_author_id = 123; // 替换成WP-Types里你的自定义文章类型slug $custom_post_type = 'classified_ad'; // 查询该作者所有已发布的文章 $target_posts = get_posts(array( 'post_type' => $custom_post_type, 'post_status' => 'publish', 'author' => $target_author_id, 'posts_per_page' => -1, 'meta_query' => array( 'relation' => 'OR', // 筛选设置了固定过期日期且已到时间的文章 array( 'key' => 'expiration_date', 'value' => date('Y-m-d'), 'compare' => '<=', 'type' => 'DATE' ), // 筛选设置了过期天数的文章 array( 'key' => 'days_to_expire', 'value' => '', 'compare' => '!=' ) ) )); // 遍历处理每篇文章 foreach ($target_posts as $post) { $expire_days = get_post_meta($post->ID, 'days_to_expire', true); if ($expire_days) { // 计算发布后N天的过期时间 $post_publish_time = strtotime($post->post_date); $expire_time = $post_publish_time + ($expire_days * 86400); // 86400是一天的秒数 if (time() >= $expire_time) { wp_update_post(array( 'ID' => $post->ID, 'post_status' => 'draft' // 可替换为private(私有)或trash(回收站) )); } } else { // 已通过日期字段判断过期,直接修改状态 wp_update_post(array( 'ID' => $post->ID, 'post_status' => 'draft' )); } } }
注意:一定要把代码里的$target_author_id和$custom_post_type替换成你站点的实际值!
方案二:插件实现(适合纯新手)
如果你不想写代码,可以用成熟的定时插件结合WP-Types字段来实现:
- 安装并激活Post Expirator插件(WordPress官方插件库就能找到)
- 进入插件设置页面,找到你的自定义文章类型(WP-Types创建的那种),开启过期功能
- 在规则设置里,选择按「作者」筛选,指定目标作者,然后设置过期条件:
- 如果是固定日期过期:选择「特定日期」,关联WP-Types里的
expiration_date字段 - 如果是发布后N天过期:选择「发布后X天」,设置对应的天数
- 如果是固定日期过期:选择「特定日期」,关联WP-Types里的
- 最后选择过期后的文章状态(比如草稿、私有),保存设置即可
重要注意事项
- 确保WordPress的定时任务正常运行:WP的定时任务依赖站点访问触发,如果你的站点访问量很低,建议配置服务器的系统定时任务,定期访问
wp-cron.php文件来触发 - 测试时可以临时把定时间隔改成15分钟(把代码里的
'daily'改成'fifteen_minutes'),确认功能正常后再改回每天执行
内容的提问来源于stack exchange,提问作者labworxsa
相关产品推荐
相关产品推荐

