这是一个想法,但在我们深入讨论细节之前,以下是VERY VERY IMPORTANT 注释
注意:在运行此代码之前,请先阅读此内容并备份数据库。出于测试目的,建议首先在本地安装上运行此操作。
注意wp_trash_post()
, 来自法典
如果禁用垃圾箱,则会永久删除帖子或页面。
我已经对代码进行了测试,它可以正常工作。但是,您可以对其进行更改以满足您的需要。目前,代码应该只在发布新帖子时删除帖子
我们需要做的是
发布新帖子时,运行自定义功能删除帖子。为此,我们将使用transition_post_status
钩只需注意,当一篇文章被发布、丢弃、更新和删除时,这个钩子就会触发。我们需要将自定义函数限制为仅在发布帖子时运行。这条线,if ( $new_status == \'publish\' && $old_status != \'publish\' )
会处理好的
使用get_posts()
获取所有已发布的帖子。您可以根据自己的需要进行调整。我们只需要post ID,所以这就是我们将得到的。它使查询速度非常快,并且不会占用资源
返回的帖子数组get_posts()
需要统计,如果有1000多个帖子,我们需要在前1000个帖子之后获得帖子ID。我们将使用array_slice
在这里
我们需要跑步wp_trash_post
如果我们有1000多个帖子要丢弃这些帖子。如果您还需要删除帖子附带的所有内容,可以使用wp_delete_post
此处代替wp_trash_post
. 您只需取消对此行的注释,wp_delete_post( $trash_post );
在代码中,并注释掉这一行wp_trash_post( $trash_post );
. 不要同时运行两者
将其放入代码中,代码也有很好的注释,因此很容易理解。只需注意一点,您至少需要PHP5。由于使用了新的数组语法,您的服务器上安装了4个以上。还要注意的是,闭包至少需要PHP5。3.
add_action( \'transition_post_status\', function ( $new_status, $old_status, $post )
{
// Run this only when a new post is publish to save on unnecessary waste of resources
if ( $new_status == \'publish\' && $old_status != \'publish\' ) {
/*
* Use get_posts() to count all the posts published, get only post ids to improve performance
* This array of post ids will also be used to get the post ids of posts to be trashed
*/
$total_posts = get_posts( [\'posts_per_page\' => -1, \'fields\' => \'ids\'] );
// Count the amount of posts in the returned array from get_posts
$count = count( $total_posts );
// Run the following only if we have more than a thousand posts
if ( $count > 1000 ) {
// Get all post id after the first 1000 posts
$set_to_trash = array_slice( $total_posts, 1000 );
foreach ( $set_to_trash as $trash_post ) {
// Use wp_trash_post to trash the posts
wp_trash_post( $trash_post );
// You can also use wp_delete_post here to delete everything attached to the post
//wp_delete_post( $trash_post );
}
// Unset $trash_post for safety
unset( $trash_post );
}
}
}, 10, 3 );
最后,您可以通过将以下行添加到
wp-config.php
define(\'EMPTY_TRASH_DAYS\', 0 );
请注意,这将永久删除帖子,并且无法恢复