前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ChatGPT】WordPress如何删除某用户ID下某一时间段的帖子?

【ChatGPT】WordPress如何删除某用户ID下某一时间段的帖子?

原创
作者头像
半夜喝可乐
发布2023-08-02 20:50:48
2390
发布2023-08-02 20:50:48
举报
文章被收录于专栏:小轻论坛

因为我用的是WordPress博客,然后搭建的子比主题,有时候需要删除大量的垃圾贴和水帖,所以我直接问ChatGPT如何实现这个功能,我们首先需要告诉他怎么去实现这个功能,比如我删除帖子的SQL代码是:

代码语言:javascript
复制
delete from wp_posts where `post_author` = 1 AND `post_date` >='2023-06-01 00:00:00' and `post_date` < '2023-08-2 23:59:59';

这段代码就是删除了用户ID为1在2023-06-01 00:00:00到2023-08-2 23:59:59之间发布的帖子,我们提问的方式是,需要按照这段SQL代码然后写出一个可以填写用户ID和删除日期时间的PHP页面。

多次调试后,我得到了这样一段代码:

代码语言:javascript
复制
<?php
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 获取表单提交的用户ID和时间区间
    $postAuthor = $_POST['post_author'];
    $startDate = $_POST['start_date'];
    $endDate = $_POST['end_date'];

    // 连接到数据库
    $host = '数据库主机名';
    $dbname = '数据库名称';
    $username = '数据库用户名';
    $password = '数据库密码';

    try {
        // 连接到数据库
        $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // 构建 SQL 删除命令
        $sql = "DELETE FROM wp_posts WHERE `post_author` = :postAuthor AND `post_date` >= :startDate AND `post_date` < :endDate";

        // 准备和执行删除命令
        $stmt = $pdo->prepare($sql);
        $stmt->bindParam(':postAuthor', $postAuthor, PDO::PARAM_INT);
        $stmt->bindParam(':startDate', $startDate, PDO::PARAM_STR);
        $stmt->bindParam(':endDate', $endDate, PDO::PARAM_STR);
        $stmt->execute();

        // 输出删除成功的提示
        $rowCount = $stmt->rowCount();
        echo "成功删除了 $rowCount 条帖子。";
    } catch (PDOException $e) {
        // 输出错误信息
        echo "删除帖子时发生错误:" . $e->getMessage();
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>删除帖子</title>
    <!-- 引入 Bootstrap 样式 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
    <!-- 引入 Flatpickr 样式 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
</head>
<body>
    <div class="container">
    <h1>删除帖子</h1>
    <form method="POST" action="">
        <div class="mb-3">
            <label for="post_author" class="form-label">用户ID:</label>
            <input type="text" class="form-control" name="post_author" id="post_author" required>
        </div>

        <div class="mb-3">
            <label for="start_date" class="form-label">开始日期:</label>
            <input type="text" class="form-control" name="start_date" id="start_date" required>
        </div>

        <div class="mb-3">
            <label for="end_date" class="form-label">结束日期:</label>
            <input type="text" class="form-control" name="end_date" id="end_date" required>
        </div>

        <input type="submit" class="btn btn-primary" value="删除帖子">
    </form>
    </div>

    <!-- 引入 Bootstrap 和 Flatpickr -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
    <script>
        // 初始化日期和时间选择器
        $(function () {
            $('#start_date').flatpickr({
                enableTime: true,
                dateFormat: 'Y-m-d H:i:s'
            });

            $('#end_date').flatpickr({
                enableTime: true,
                dateFormat: 'Y-m-d H:i:s'
            });
        });
    </script>
</body>
</html>

前端界面为:

发现确实可以删除帖子,然后我又将删除的提示美化了下,然后直接在用户ID下方设置了一个删除所有文章的按钮。逻辑是如果勾选了删除所有文章,起止日期将被停用,所以得到了这段代码:

代码语言:javascript
复制
<?php
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 获取表单提交的用户ID和时间区间
    $postAuthor = $_POST['post_author'];
    $startDate = $_POST['start_date'];
    $endDate = $_POST['end_date'];

    // 连接到数据库
    $host = '数据库主机名';
    $dbname = '数据库名称';
    $username = '数据库用户名';
    $password = '数据库密码';

    try {
        // 连接到数据库
        $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // 构建 SQL 删除命令
        $sql = "DELETE FROM wp_posts WHERE `post_author` = :postAuthor";

        // 如果选择了删除所有,则不需要时间区间条件
        if (!isset($_POST['delete_all'])) {
            $sql .= " AND `post_date` >= :startDate AND `post_date` < :endDate";
        }

        // 准备和执行删除命令
        $stmt = $pdo->prepare($sql);
        $stmt->bindParam(':postAuthor', $postAuthor, PDO::PARAM_INT);
        if (!isset($_POST['delete_all'])) {
            $stmt->bindParam(':startDate', $startDate, PDO::PARAM_STR);
            $stmt->bindParam(':endDate', $endDate, PDO::PARAM_STR);
        }
        $stmt->execute();

        // 输出删除成功的提示
        $rowCount = $stmt->rowCount();
        echo '<div class="container alert alert-success" role="alert">';
        echo "成功删除了 $rowCount 条帖子。";
        echo '</div>';
    } catch (PDOException $e) {
        // 输出错误信息
        echo '<div class="container alert alert-danger" role="alert">';
        echo "删除帖子时发生错误:" . $e->getMessage();
        echo '</div>';
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>删除帖子</title>
    <!-- 引入 Bootstrap 样式 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
    <!-- 引入 Flatpickr 样式 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
</head>
<body>
    <div class="container">
    <h1>删除帖子</h1>
    <form method="POST" action="">
        <div class="mb-3">
            <label for="post_author" class="form-label">用户ID:</label>
            <input type="text" class="form-control" name="post_author" id="post_author" required>
        </div>

        <div class="mb-3 form-check">
            <input type="checkbox" class="form-check-input" name="delete_all" id="delete_all">
            <label class="form-check-label" for="delete_all">删除所有文章</label>
        </div>

        <div class="mb-3">
            <label for="start_date" class="form-label">开始日期:</label>
            <input type="text" class="form-control" name="start_date" id="start_date" required>
        </div>

        <div class="mb-3">
            <label for="end_date" class="form-label">结束日期:</label>
            <input type="text" class="form-control" name="end_date" id="end_date" required>
        </div>

        <input type="submit" class="btn btn-primary" value="删除帖子">
    </form>
    </div>

    <!-- 引入 Bootstrap 和 Flatpickr -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
    <script>
        // 初始化日期和时间选择器
        $(function () {
            $('#start_date').flatpickr({
                enableTime: true,
                dateFormat: 'Y-m-d H:i:s'
            });

            $('#end_date').flatpickr({
                enableTime: true,
                dateFormat: 'Y-m-d H:i:s'
            });

            // 监听删除所有复选框的变化
            $('#delete_all').change(function () {
                if (this.checked) {
                    $('#start_date, #end_date').prop('disabled', true);
                } else {
                    $('#start_date, #end_date').prop('disabled', false);
                }
            });
        });
    </script>
</body>
</html>

前端页面是:

效果还不错,删除也挺迅速的,至少比在WordPress后台删除速度快很多。

如果你觉得本文有用,希望能回来点个赞!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档