ky818smKy818sm  2025-11-14 16:08 旷野小站 隐藏边栏 |   抢沙发  8 
文章评分 0 次,平均分 0.0

使用数据库SQL查询(最快最直接)

UPDATE wp_posts 
SET post_content = REPLACE(
    post_content,
    '<h2>从小站云盘下载</h2>
<p class="ky-center"><a href="',
    '<h2>从小站云盘下载</h2>
<p class="center"><a href="'
);

UPDATE wp_posts 
SET post_content = REPLACE(
    post_content,
    '" target="_blank" rel="nofollow noopener">下载地址</a><br>按编号选择进入<a href="',
    '"><span class="biankuang">从小站云盘下载</span></a></p>
<p class="center"><a href="'
);

UPDATE wp_posts 
SET post_content = REPLACE(
    post_content,
    '" target="_blank" rel="nofollow noopener">下载入口</a><br>
<span style="text-align: center; height: 38px; color: rgb(75, 218, 210) ;">如果本资源侵犯到您的权益请联系我们删除</span><br>
<span style="text-align: center; height: 38px; color: rgb(183, 183, 183) ;">联系方式QQ邮箱:6167555@qq.com</span></div>',
    '" target="_blank" rel="nofollow noopener"><span class="ky-biankuang">按编号查找下载</span></a></p>
<h2>从百度网盘下载</h2>'
);

操作前务必:

  • 备份数据库
  • 在测试环境先验证

建议添加WHERE条件
为了安全,建议每条都加上WHERE条件:

sql
UPDATE wp_posts 
SET post_content = REPLACE(...)
WHERE post_content LIKE '%本资源下载请点击%';

WHERE条件的核心作用

不加WHERE:

  • 扫描所有文章
  • 对每篇文章执行REPLACE操作
  • 即使文章不包含目标内容也要扫描一遍

加WHERE:

  • 只扫描包含特定特征的文章
  • 只对这些文章执行REPLACE操作
  • 其他文章完全跳过,不浪费资源

使用PHP脚本的正则表达式方法

在WordPress网站的根目录(与wp-config.php同一目录)创建一个新文件,比如命名为exact_match_replace.php
vim exact_match_replace.php


<?php
/**
 * 终极批量替换脚本 - 经过实践验证的最佳版本
 * 特点:精确匹配、安全可靠、进度清晰、支持续传
 */

define('DONOTCACHEPAGE', true);
error_reporting(0);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');

require_once('./wp-load.php');
global $wpdb;

echo "🎯 终极批量替换脚本\n";
echo "==================\n";

$config = array(
    'dry_run' => true,  // true=测试模式, false=实际执行
    'batch_size' => 100 // 每批处理数量
);

// ==================== 配置区域开始 ====================
// 修改这里的三个变量来适应不同的替换需求

// 1. 正则表达式模式(要查找的内容)
$exact_pattern = '#<div id="wpxz" style="height: 38px; "></div>\s*<div style="text-align: center;background-color: rgb\(238, 238, 238\);">本资源下载请点击<a href="([^"]*)" target="_blank" rel="nofollow noopener">下载地址</a><br>按编号选择进入<a href="([^"]*)" target="_blank" rel="nofollow noopener">下载入口</a><br>\s*<span style="text-align: center; height: 38px; color: rgb\(75, 218, 210\) ;">如果本资源侵犯到您的权益请联系我们删除</span><br>\s*<span style="text-align: center; height: 38px; color: rgb\(183, 183, 183\) ;">联系方式QQ邮箱:6167555@qq.com</span></div>#';

// 2. 替换模板(要替换成的内容)
$replace_template = '<h2>从小站云盘下载</h2>
<p class="ky-center"><a href="$1" target="_blank" rel="nofollow noopener"><span class="ky-biankuang">从小站云盘下载</span></a></p>
<p class="ky-center"><a href="$2" target="_blank" rel="nofollow noopener"><span class="ky-biankuang">按编号查找下载</span></a></p>
<h2>从百度网盘下载</h2>';

// 3. SQL查找条件(精确查找要替换的文章)
$where_sql = "post_type = 'post' 
              AND post_status = 'publish' 
              AND post_content LIKE '%<div id=\"wpxz\" style=\"height: 38px; \"></div>%'
              AND post_content LIKE '%本资源下载请点击%'
              AND post_content LIKE '%下载地址%'
              AND post_content LIKE '%按编号选择进入%'
              AND post_content LIKE '%下载入口%'
              AND post_content LIKE '%如果本资源侵犯到您的权益请联系我们删除%'
              AND post_content LIKE '%联系方式QQ邮箱:6167555@qq.com%'";

// ==================== 配置区域结束 ====================

echo "🔧 配置信息:\n";
echo "   模式: " . ($config['dry_run'] ? "测试模式" : "实际执行") . "\n";
echo "   批次大小: {$config['batch_size']} 篇\n\n";

// 统计总数
$total_posts = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE {$where_sql}");
echo "📊 找到 {$total_posts} 篇匹配的文章\n";

if ($total_posts == 0) {
    echo "❌ 没有找到匹配的文章\n";
    exit;
}

// 检查是否已经部分替换
$replaced_count = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE {$where_sql} AND post_content LIKE '%<h2>从小站云盘下载</h2>%'");
if ($replaced_count > 0) {
    echo "💡 已有 {$replaced_count} 篇文章被替换过\n";
}

$processed = 0;
$updated = 0;
$offset = 0;

echo "\n🎯 开始处理...\n";
echo str_repeat("-", 60) . "\n";

while (true) {
    $posts = $wpdb->get_results($wpdb->prepare(
        "SELECT ID, post_title, post_content FROM {$wpdb->posts} WHERE {$where_sql} ORDER BY ID LIMIT %d, %d",
        $offset, $config['batch_size']
    ));

    if (empty($posts)) break;

    foreach ($posts as $post) {
        $processed++;
        
        // 跳过已替换的文章(支持续传)
        if (strpos($post->post_content, '<h2>从小站云盘下载</h2>') !== false) {
            continue;
        }
        
        $original_content = $post->post_content;
        
        if (preg_match($exact_pattern, $original_content, $matches)) {
            $new_content = preg_replace($exact_pattern, $replace_template, $original_content);
            
            if (!$config['dry_run']) {
                $result = $wpdb->update(
                    $wpdb->posts,
                    array('post_content' => $new_content),
                    array('ID' => $post->ID)
                );
                
                if ($result !== false) {
                    $updated++;
                    if ($processed % 50 == 0) {
                        echo "✅ 已更新: {$post->post_title} (ID: {$post->ID})\n";
                    }
                }
            } else {
                $updated++;
                if ($processed % 50 == 0) {
                    echo "✅ 匹配: {$post->post_title} (ID: {$post->ID}) - 测试模式\n";
                }
            }
        }

        // 显示进度
        if ($processed % 100 == 0) {
            echo "进度: {$processed}/{$total_posts}\n";
        }
    }

    $offset += $config['batch_size'];
    
    // 批次间短暂暂停
    usleep(50000);
}

echo "\n" . str_repeat("=", 60) . "\n";
echo "🎉 处理完成!\n";
echo "总匹配文章: {$total_posts} 篇\n";
echo "已处理: {$processed} 篇\n";
echo "成功匹配: {$updated} 篇\n";
echo "模式: " . ($config['dry_run'] ? "测试模式" : "实际执行") . "\n";

if ($config['dry_run']) {
    echo "\n💡 要实际执行请设置 'dry_run' => false\n";
} else {
    echo "\n✅ 实际替换已完成!\n";
}

// 最终统计
echo "\n📊 最终统计:\n";
$final_replaced = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE '%<h2>从小站云盘下载</h2>%'");
echo "总已替换文章: {$final_replaced} 篇\n";

echo "============================================\n";
?>

如果测试成功,修改配置后实际执行:


$config = array(
    'dry_run' => false,  // 实际执行
    'limit' => 0,        // 无限制
);
声明:本站许多内容均从网上收集整理,若有内容侵犯到您的权益,请通过邮件【6167555@qq.com】联系本站,我们将及时删除!

有问题请点我联系站长

「点点赞赏,手留余香」
HIDE

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享