仅在 worpdress 帖子中批量更改年份

问题描述 投票:0回答:2

我试图仅更新 WordPress 网站上所有帖子和页面的发布日期年份。

我错误地用插件查找并替换,并将 2018 年替换为 2019 年。结果,很多帖子显示为“已计划”,因为它们的发布日期更改为 2019 年。实际上我只想更改帖子/页面标题中显示的是 2018 年,而不是发布日期。

我想知道这是否有效,但我担心它可能会损坏整个网站。这是我在网上找到的一些代码:

UPDATE wp_posts
SET post_date = REPLACE(post_date, '2019-‘, '2018-')
WHERE post_date LIKE '%2018-%'

我不确定这是否是在 phpmyadmin 中运行的正确代码。在进行任何更改之前我已经备份了网站。

mysql wordpress phpmyadmin
2个回答
1
投票

使用特定于日期的函数而不是基于字符串的函数。

UPDATE wp_posts
SET post_date = post_date + INTERVAL 1 YEAR
WHERE YEAR(post_date) = 2018;

0
投票

如果您想更新所有 WordPress 帖子,以便它们保留原来的日期和月份,但只是将年份更改为今年,您将需要稍微不同的 PHP 脚本。此脚本将获取每个帖子的日期,将年份修改为当前年份,然后使用新日期更新帖子。

这是一个 PHP 代码片段,它的作用正是如此:

function update_posts_year_to_current() {
    $current_year = date('Y'); // Get the current year

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1, // Get all posts
        'post_status' => 'any' // Include posts in all statuses
    );

    $query = new WP_Query($args);

    if($query->have_posts()) {
        while($query->have_posts()) {
            $query->the_post();
            $post_id = get_the_ID();
            $original_date = get_the_date('Y-m-d H:i:s'); // Get the original post date and time

            $new_date = $current_year . substr($original_date, 4); // Change the year but keep the month, day, and time

            $post_data = array(
                'ID' => $post_id,
                'post_date' => $new_date,
                'post_date_gmt' => get_gmt_from_date($new_date)
            );

            wp_update_post($post_data);
        }
        wp_reset_postdata();
    }
}

// Run this function once to update all posts
update_posts_year_to_current();

使用代码片段的步骤

  1. 在运行脚本之前备份您的 WordPress 数据库,以避免意外数据丢失。
  2. 将脚本添加到主题的
    functions.php
    文件中,或使用“代码片段”等插件添加自定义 PHP,而无需编辑主题文件。
  3. 添加此代码并验证其按预期工作(也许首先在临时站点上进行测试)后,请确保删除或禁用它以防止将来发生意外更改。

此脚本将所有帖子的发布日期的年份部分更改为当前年份,同时保留原始帖子日期的月、日和时间。

© www.soinside.com 2019 - 2024. All rights reserved.