使用特殊类别的片段自动删除旧帖子

问题描述 投票:0回答:1

亲爱的,

我想在不使用插件的情况下自动删除旧帖子,并且可以选择片段,我想使用此片段从特殊类别中删除任何超过一天的帖子,但没有删除任何内容:

// Automatically delete posts older than x days
function delete_old_posts($category_id = 62) {
    $days = 1; // Change this value to the desired number of days
    $args = array(
        'post_type'      => 'post',
        'posts_per_page' => -1,
        'date_query'     => array(
            array(
                'before' => $days . ' days ago',
                'inclusive' => true,
            ),
        ),
    'tax_query' => array(
      array(
        'taxonomy' => 'slug', // Replace 'category' with your actual taxonomy slug if different
        'field' => 'id',
        'terms' => array($category_id), // Array of category IDs to target
      ),
    ),
    );
    $old_posts = new WP_Query($args);

    if ($old_posts->have_posts()) :
        while ($old_posts->have_posts()) : $old_posts->the_post();
            wp_delete_post(get_the_ID(), true);
        endwhile;
    endif;
    wp_reset_postdata();
}
add_action('wp', 'delete_old_posts');
wordpress code-snippets vscode-snippets
1个回答
0
投票

没有直接的解决方案:

WP 中没有直接的解决方案,您必须使用自定义 SQL。

职位和任期表及其关系的基本了解:

  • wp_terms
    存储术语名称与主键(PK)关联的ID
  • wp_term_relationships
    是帖子及其分类/术语之间的关系表
  • Table
    wp_term_taxonomy
    是术语及其相关分类法之间的关系表

SQL:

注意,在使用删除记录等不可撤销的操作之前,请务必先通过

SELECT
语句检查 SQL。

选择:

SELECT
    *
FROM
    wp_posts wp
WHERE
    post_date <= DATE_SUB(NOW(), INTERVAL 6 HOUR)
    AND
    post_type = 'post'
    AND
    ID IN (
    SELECT
        wtr.object_id
    FROM
        wp_term_taxonomy wtt
    JOIN wp_terms wt ON
        wtt.term_id = wt.term_id
    JOIN wp_term_relationships wtr ON
        wt.term_id = wtr.term_taxonomy_id
    WHERE
        wtt.taxonomy = 'category'
        AND wt.slug = 'temp');

删除:

如果您对

SELECT
语句的输出感到满意,请将其更改为
DELETE
语句,如下所示。

DELETE
FROM
    wp_posts wp
WHERE
    post_date <= DATE_SUB(NOW(), INTERVAL 6 HOUR)
    AND
    post_type = 'post'
    AND
    ID IN (
    SELECT
        wtr.object_id
    FROM
        wp_term_taxonomy wtt
    JOIN wp_terms wt ON
        wtt.term_id = wt.term_id
    JOIN wp_term_relationships wtr ON
        wt.term_id = wtr.term_taxonomy_id
    WHERE
        wtt.taxonomy = 'category'
        AND wt.slug = 'temp');
© www.soinside.com 2019 - 2024. All rights reserved.