每当用户创建新帖子时,如何删除用户以前的所有帖子
How to delete all previous posts by user, whenever they create a new one
我在一个允许特定用户前端创建 post 的网站上工作。我用 WP User Frontend 做这个。我想知道是否有一种方法可以在用户 post 新用户时删除用户之前的 post?我对 PHP 很满意,所以硬编码一些东西来完成这项工作是没有问题的。
我认为有一些选择可以做到这一点。但我更喜欢使用 WP REST API 如果你 运行 最新的 wordpress 版本
首先使用这个 url
从某个作者(作者 ID)获取 posts
http://yourwebsite/wp/wp-json/wp/v2/posts/?author=3
从那里您会得到一些 posts 由该作者 post编辑的字段。您只需要获取 posts id 并选择要使用下一个函数删除的 id ( delete post )。在你的情况下,你只需要保留第一个(最新的).post id。
删除帖子
在你得到 post 个你想要删除的 ID 后,你可以 运行 WP REST API 删除 posts 函数。在这个过程中你需要身份验证过程。我建议您使用 WP Basic Auth 插件,因为我觉得它比其他身份验证过程更容易。
执行此操作的一种简单方法是分步分解您需要执行的操作,然后从那里构建查询。
以下是我采取的步骤:
- 创建用户在 his/her 名称下拥有的所有 post 的循环。这可以通过使用正常的 WP_Query functionality and using the Author arguments alongside the get_current_user_id() WordPress 功能来完成。
- 创建一个在函数结束时递增的计数器
- 检查计数器的当前状态,如果它不在第一个 post,请删除它在的 post。
这是我整理的代码。我已经将该函数挂接到 admin_init
上,如果您有很多并发用户,这可能会减慢后端速度,在这种情况下,将它挂接到 post_save 类型的操作中可能会更安全。
add_action( 'admin_init', 'removing_older_posts' );
function removing_older_posts() {
$args = array (
'post_type' => 'post',
'author' => get_current_user_id(),
'orderby' => 'date',
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) { //if the current user has posts under his/her name
$i = 0; //create post counter
while ( $query->have_posts() ) { //loop through each post
$query->the_post(); //get the current post
if ($i > 0) { //if you're not on the first post
wp_delete_post( $query->post->ID, true ); //delete the post
}
$i++; //increment the post counter
}
wp_reset_postdata();
}
}
我在一个允许特定用户前端创建 post 的网站上工作。我用 WP User Frontend 做这个。我想知道是否有一种方法可以在用户 post 新用户时删除用户之前的 post?我对 PHP 很满意,所以硬编码一些东西来完成这项工作是没有问题的。
我认为有一些选择可以做到这一点。但我更喜欢使用 WP REST API 如果你 运行 最新的 wordpress 版本
首先使用这个 url
从某个作者(作者 ID)获取 postshttp://yourwebsite/wp/wp-json/wp/v2/posts/?author=3
从那里您会得到一些 posts 由该作者 post编辑的字段。您只需要获取 posts id 并选择要使用下一个函数删除的 id ( delete post )。在你的情况下,你只需要保留第一个(最新的).post id。
删除帖子 在你得到 post 个你想要删除的 ID 后,你可以 运行 WP REST API 删除 posts 函数。在这个过程中你需要身份验证过程。我建议您使用 WP Basic Auth 插件,因为我觉得它比其他身份验证过程更容易。
执行此操作的一种简单方法是分步分解您需要执行的操作,然后从那里构建查询。
以下是我采取的步骤:
- 创建用户在 his/her 名称下拥有的所有 post 的循环。这可以通过使用正常的 WP_Query functionality and using the Author arguments alongside the get_current_user_id() WordPress 功能来完成。
- 创建一个在函数结束时递增的计数器
- 检查计数器的当前状态,如果它不在第一个 post,请删除它在的 post。
这是我整理的代码。我已经将该函数挂接到 admin_init
上,如果您有很多并发用户,这可能会减慢后端速度,在这种情况下,将它挂接到 post_save 类型的操作中可能会更安全。
add_action( 'admin_init', 'removing_older_posts' );
function removing_older_posts() {
$args = array (
'post_type' => 'post',
'author' => get_current_user_id(),
'orderby' => 'date',
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) { //if the current user has posts under his/her name
$i = 0; //create post counter
while ( $query->have_posts() ) { //loop through each post
$query->the_post(); //get the current post
if ($i > 0) { //if you're not on the first post
wp_delete_post( $query->post->ID, true ); //delete the post
}
$i++; //increment the post counter
}
wp_reset_postdata();
}
}