核心代码
专门复制 /wp-includes/blocks/ 目录中的所有 .css 文件到 /my/blocks/ 目录,同时保持子目录结构:
// 递归复制blocks目录中的所有CSS文件
function copy_blocks_css_files($source, $target) {
// 检查源文件夹是否存在
if (!is_dir($source)) {
$message = '错误:源文件夹不存在';
return ['success' => false, 'message' => $message];
}
// 检查目标文件夹是否存在,如果不存在则创建
if (!is_dir($target)) {
if (!wp_mkdir_p($target)) {
$message = '错误:无法创建目标文件夹';
return ['success' => false, 'message' => $message];
}
}
// 打开源目录
$dir = opendir($source);
$copied_files = 0;
$errors = 0;
// 遍历源目录中的文件和文件夹
while (($file = readdir($dir)) !== false) {
if ($file != '.' && $file != '..') {
$srcFile = $source . '/' . $file;
$tarFile = $target . '/' . $file;
if (is_dir($srcFile)) {
// 如果是文件夹,递归复制
$result = copy_blocks_css_files($srcFile, $tarFile);
if (!$result['success']) {
$errors++;
} else {
$copied_files += $result['copied_files'];
}
} else {
// 只复制.css文件
if (pathinfo($file, PATHINFO_EXTENSION) === 'css') {
// 如果是文件,复制文件
if (!copy($srcFile, $tarFile)) {
$errors++;
} else {
$copied_files++;
}
}
}
}
}
// 关闭目录
closedir($dir);
if ($errors > 0) {
$message = "复制完成,但遇到 $errors 个错误。成功复制 $copied_files 个CSS文件";
return ['success' => false, 'message' => $message, 'copied_files' => $copied_files];
} else {
$message = "成功复制 $copied_files 个CSS文件到目标目录";
return ['success' => true, 'message' => $message, 'copied_files' => $copied_files];
}
}
// 使用函数复制blocks目录中的CSS文件
$source_dir = ABSPATH . 'wp-includes/blocks/';
$target_dir = ABSPATH . 'my/blocks/';
$result = copy_blocks_css_files($source_dir, $target_dir);
// 输出结果
if ($result['success']) {
error_log($result['message']);
} else {
error_log('错误: ' . $result['message']);
}使用说明
- 将这段代码添加到你的WordPress主题的
functions.php文件中或自定义插件中 - 确保Web服务器对源目录有读取权限,对目标目录有写入权限
- 代码会在执行时复制所有CSS文件并记录结果到错误日志
代码说明
- 添加了文件类型过滤:只复制扩展名为
.css的文件 - 改进了返回结果:
- 添加了
copied_files字段来统计成功复制的文件数量 - 区分了成功和部分成功(有错误)的情况
- 保持了递归结构:仍然会递归遍历所有子目录,但只复制CSS文件
- 使用了WordPress函数:使用
wp_mkdir_p()而不是mkdir()来确保目录创建权限正确 - 添加了错误日志:使用
error_log()记录操作结果
这个实现保持了您原有代码的结构和风格,同时添加了必要的过滤功能来只复制CSS文件。

