批量更新所有帖子的代码行

时间:2017-12-02 作者:GenesisBits

今天有点困惑。我在我的网站中实现了一些查询字符串,所以我想追溯更新我之前(600多篇)的所有帖子,以更新包含此查询字符串的特定超链接。

例如,我的大多数帖子都有这样的代码:

<a data-name="Dish Washer">Dish Washer</a> 
是否有可能强制更新所有帖子以更改此链接:

<a data-name="Dish Washer" href="/items/?item=Dish Washer">Dish Washer</a>
最困难的是,显然不仅仅是“洗碗机”,每个帖子都包含大量的物品。

我想知道是否可以通过MySQL来实现,但我一辈子都想不出来。

1 个回复
最合适的回答,由SO网友:kierzniak 整理而成

此脚本将根据您的需要获取所有帖子并替换其内容:

function wpse_287574_replace_content() {

    // Get all posts
    $query = new WP_Query(array(
        \'post_type\' => \'post\',
        \'posts_per_page\' => -1,
    ));

    $posts = $query->get_posts();

    foreach ($posts as $post) {

        // Get content
        $content = $post->post_content;

        // Regex and replacement
        $regex = \'/^(\\<a\\s+data-name=\\".+\\")(\\>(.+)\\<\\/a\\>)$/\';
        $replacement = \'$1 href="/items/?item=$3"$2\';

        // Replace content
        $new_content = preg_replace($regex, $replacement, $content);


        // Prepare arguments
        $args = array(
            \'ID\' => $post->ID,
            \'post_content\' => $new_content,
        );

        // Update post
        wp_update_post( $args );
    }
}

add_action(\'init\', \'wpse_287574_replace_content\');

结束