You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress多站点中复制指定MySQL行并修改option_name的方法

批量复制WordPress多站点的主题配置项

嘿,针对你这个WordPress多站点的需求,我给你准备了两种靠谱的解决方案——一种是直接用MySQL的存储过程批量处理数据库,另一种是用WordPress原生函数写脚本,更符合WP的操作规范,你可以根据自己的情况选:

方案一:MySQL存储过程(直接操作数据库)

这个方案适合熟悉数据库操作的用户,能一次性批量处理所有子站点的表。核心思路是自动识别所有mywpsite_XX_options格式的表,然后循环每个表复制指定行:

-- 先创建存储过程
DELIMITER //
CREATE PROCEDURE CopyThemeMods()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE tableName VARCHAR(255);
    DECLARE cur CURSOR FOR 
        SELECT table_name 
        FROM information_schema.tables 
        WHERE table_name LIKE 'mywpsite\_%\_options' 
        AND table_schema = DATABASE(); -- 只处理当前数据库的表
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO tableName;
        IF done THEN
            LEAVE read_loop;
        END IF;
        
        -- 执行插入:复制原theme_mods行,修改option_name,不指定option_id让数据库自增
        SET @sql = CONCAT(
            'INSERT INTO `', tableName, '` (`option_name`, `option_value`, `autoload`) ',
            'SELECT ''theme_mods_my-new-theme'', `option_value`, `autoload` ',
            'FROM `', tableName, '` ',
            'WHERE `option_name` = ''theme_mods_my-theme'';'
        );
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END LOOP;
    CLOSE cur;
END //
DELIMITER ;

-- 执行存储过程
CALL CopyThemeMods();

-- 执行完可以删除存储过程(可选)
DROP PROCEDURE IF EXISTS CopyThemeMods;

注意事项:

  • 执行前一定要备份数据库!
  • 确保你的MySQL账号有创建存储过程的权限
  • option_id是自增主键,所以插入时不要指定它,数据库会自动分配唯一ID,避免冲突
  • 如果某个子站点的表中没有theme_mods_my-theme行,这条SQL会自动跳过,不会报错

方案二:WordPress自定义脚本(更安全)

如果你不想直接操作数据库,用WordPress的原生函数更稳妥,不会破坏WP的数据库结构。可以写一个临时脚本,放在你的WordPress根目录,执行后删除:

<?php
// 加载WordPress环境
require_once('wp-load.php');

// 获取所有子站点
$sites = get_sites();

foreach ($sites as $site) {
    // 切换到当前子站点
    switch_to_blog($site->blog_id);
    
    // 获取原主题的配置项
    $theme_mods = get_option('theme_mods_my-theme');
    
    if ($theme_mods) {
        // 插入新的主题配置项,add_option会自动处理不存在的情况,避免重复插入
        add_option('theme_mods_my-new-theme', $theme_mods, '', 'yes');
        echo "已为站点ID {$site->blog_id} 复制主题配置项<br>";
    } else {
        echo "站点ID {$site->blog_id} 不存在theme_mods_my-theme配置项,跳过<br>";
    }
    
    // 恢复到主站点
    restore_current_blog();
}

echo "批量操作完成!";
?>

使用方法:

  1. 把这段代码保存为copy-theme-mods.php,上传到WordPress根目录
  2. 在浏览器访问你的域名+/copy-theme-mods.php,执行脚本
  3. 执行完成后立即删除这个文件,避免安全风险
  4. 同样,操作前记得备份数据库

两种方案都能实现你的需求:自动遍历所有子站点,复制指定的主题配置行,修改名称后插入,原行完全保留。建议先在测试环境测试没问题后,再到生产环境执行。

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:37:56