You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在指定日期或特定天数后自动失效某作者的全部文章?

当然可以搞定这个需求!针对你用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天」,设置对应的天数
  • 最后选择过期后的文章状态(比如草稿、私有),保存设置即可

重要注意事项

  • 确保WordPress的定时任务正常运行:WP的定时任务依赖站点访问触发,如果你的站点访问量很低,建议配置服务器的系统定时任务,定期访问wp-cron.php文件来触发
  • 测试时可以临时把定时间隔改成15分钟(把代码里的'daily'改成'fifteen_minutes'),确认功能正常后再改回每天执行

内容的提问来源于stack exchange,提问作者labworxsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:07:43