亲爱的,
我想在不使用插件的情况下自动删除旧帖子,并且可以选择片段,我想使用此片段从特殊类别中删除任何超过一天的帖子,但没有删除任何内容:
// 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');
WP 中没有直接的解决方案,您必须使用自定义 SQL。
wp_terms
存储术语名称与主键(PK)关联的IDwp_term_relationships
是帖子及其分类/术语之间的关系表wp_term_taxonomy
是术语及其相关分类法之间的关系表注意,在使用删除记录等不可撤销的操作之前,请务必先通过
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');
WHERE
子句中,将 wt.slug
的值从 temp
更改为您想要的类别 slug。post_date <= DATE_SUB(NOW(), INTERVAL 6 HOUR)
将间隔更改为您想要的时间单位,如周、日、小时等(单位参考:https://dev.mysql.com/doc/refman/8.0/en/expressions。 html#时间间隔)如果您对
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');