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

使用代码片段自动删除特定分类下的旧文章

修复代码:自动删除特定分类下的旧文章

你的代码没生效是几个关键错误导致的,下面逐个修正并说明:

核心错误与修正点

  • 分类法参数写错:tax_query里的taxonomy字段填成了slug,默认文章分类的分类法是category,这是导致筛选不到目标分类文章的核心问题。
  • 钩子选择不合理:用wp钩子会在前台每次加载时触发,既拖慢性能,还可能因为当前用户权限不足(比如访客访问)无法执行删除。换成admin_init仅在后台执行,或者用定时任务更稳妥。
  • 日期查询优化:虽然"$days days ago"能被解析,但用strtotime生成明确的时间戳更可靠,避免日期格式解析异常。
  • 显式指定文章状态:加上post_status => 'publish',确保只处理已发布的旧文章,不会误删草稿或待审内容。

修正后的完整代码

// 自动删除特定分类下发布超过1天的文章
function delete_old_posts() {
    $target_category_id = 62; // 目标分类ID
    $days_threshold = 1; // 超过这个天数的文章会被删除

    // 计算截止时间:当前时间往前推N天
    $cutoff_date = strtotime("-$days_threshold days");

    $args = array(
        'post_type'      => 'post',
        'posts_per_page' => -1, // 获取所有符合条件的文章
        'post_status'    => 'publish', // 仅处理已发布文章
        'date_query'     => array(
            array(
                'before'     => date('Y-m-d H:i:s', $cutoff_date),
                'inclusive'  => true,
                'column'     => 'post_date', // 指定按发布时间筛选
            ),
        ),
        'tax_query' => array(
            array(
                'taxonomy' => 'category', // 正确的文章分类法
                'field'    => 'term_id', // 用分类ID筛选,写'id'也兼容,但'term_id'更标准
                'terms'    => $target_category_id, // 目标分类ID
            ),
        ),
    );

    $old_posts = new WP_Query($args);

    // 调试用:输出查询到的文章数量,确认筛选逻辑(上线后可删除)
    // error_log('待删除旧文章数量:' . $old_posts->found_posts);

    if ($old_posts->have_posts()) {
        while ($old_posts->have_posts()) {
            $old_posts->the_post();
            // 第二个参数为true直接删除不进回收站,为false则先入回收站
            wp_delete_post(get_the_ID(), true);
        }
    }

    wp_reset_postdata();
}

// 仅在后台初始化时执行,避免前台触发
add_action('admin_init', 'delete_old_posts');

// 【推荐】如果要定时自动执行,替换上面的add_action为以下代码:
// add_action('wp', function() {
//     if (!wp_next_scheduled('daily_old_posts_cleanup')) {
//         wp_schedule_event(time(), 'daily', 'daily_old_posts_cleanup');
//     }
// });
// add_action('daily_old_posts_cleanup', 'delete_old_posts');

使用说明

  1. 将代码添加到主题的functions.php或代码片段插件中即可。
  2. 若使用定时任务版本,首次需访问后台触发定时任务注册(WordPress定时任务依赖站点访问,低访问量站点可配合服务器定时任务调用wp-cron.php)。
  3. 调试阶段可以开启error_log行,查看是否查询到符合条件的文章,确认逻辑正确后再关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:12:44