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

2023-08-02 20:50:48 浏览数 (3)

因为我用的是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后台删除速度快很多。

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

0 人点赞