每当用户创建新帖子时,如何删除用户以前的所有帖子

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 插件,因为我觉得它比其他身份验证过程更容易。

参考: http://v2.wp-api.org/reference/posts/

执行此操作的一种简单方法是分步分解您需要执行的操作,然后从那里构建查询。

以下是我采取的步骤:

  1. 创建用户在 his/her 名称下拥有的所有 post 的循环。这可以通过使用正常的 WP_Query functionality and using the Author arguments alongside the get_current_user_id() WordPress 功能来完成。
  2. 创建一个在函数结束时递增的计数器
  3. 检查计数器的当前状态,如果它不在第一个 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();
    }
}