如何阻止本地WordPress通过symlink删除插件?
阻止WordPress误删本地开发插件的可行方案
首先直接给你答案:修改符号链接(symlink)的写入权限根本没法阻止WordPress删除你的插件数据。为啥?因为操作系统处理symlink时,完全忽略链接本身的权限设置,实际生效的是链接指向的目标文件夹(也就是你Git仓库里的插件目录)的权限。WordPress在后台点删除插件时,会顺着symlink找到你的Git目录,直接对目标文件夹动手——改symlink权限等于做无用功。
下面给你几个真正管用的办法,按实用性排序:
1. 给Git仓库里的插件目录设只读权限(最直接的防护)
既然WordPress要删文件必须有写入权限,那咱们就把插件目录设成Web服务器进程只能读不能写:
- 如果你用Linux/macOS,先确认Web服务器的运行用户(一般是
www-data、apache或者nginx),然后执行这两条命令:
这样你自己开发时能正常修改代码,但WordPress后台尝试删除时会因为权限不够失败,完美阻止误删。# 把插件目录的所有者设为你自己,组设为Web服务器用户 chown -R $USER:www-data /path/to/your/git/plugin-folder # 设置权限:你能读写改,Web服务器只能读 chmod -R 755 /path/to/your/git/plugin-folder
2. 用WordPress钩子拦截删除操作(最适合开发环境的灵活方案)
要是不想改系统权限,咱们可以在本地WP里加个必用插件(MU-Plugin),直接把删除按钮藏起来,还能拦截删除请求:
- 找到WP安装目录下的
wp-content/mu-plugins文件夹(没有的话自己建一个) - 新建一个文件比如
protect-dev-plugin.php,写入下面的代码:
这样一来,后台插件列表里根本看不到你的开发插件的删除按钮,就算有人想通过其他方式触发删除,也会被钩子拦下来。<?php /* * Plugin Name: 保护开发插件 * Description: 防止误删本地开发用的符号链接插件 */ // 拦截插件删除请求 add_filter('delete_plugins', function($plugins_to_delete) { // 替换成你的插件文件夹名称(就是symlink的名字) $protected_plugin = 'my-dev-plugin'; // 从删除列表里去掉受保护的插件 return array_filter($plugins_to_delete, function($plugin) use ($protected_plugin) { return strpos($plugin, $protected_plugin) === false; }); }); // 移除插件列表里的「删除」按钮 add_filter('plugin_action_links', function($actions, $plugin_file) { // 替换成你的插件主文件路径,比如'my-dev-plugin/my-dev-plugin.php' $protected_plugin_file = 'my-dev-plugin/my-dev-plugin.php'; if ($plugin_file === $protected_plugin_file && isset($actions['delete'])) { unset($actions['delete']); } return $actions; }, 10, 2);
3. Git版本控制兜底(事后补救方案)
虽然这不是事前阻止的办法,但你的插件在Git仓库里,就算真不小心删了,只要有提交记录,分分钟就能恢复:
# 进入你的插件仓库目录 cd /path/to/your/git/plugin-repo # 恢复最近一次提交的所有文件 git checkout .
不过还是建议配合前面的方案,尽量从源头避免误删。
总结一下:别在symlink权限上浪费时间了,要么给目标目录设只读权限,要么用WP钩子拦截删除,这俩方案都能彻底解决你的问题。
内容的提问来源于stack exchange,提问作者xxtesaxx
相关产品推荐
相关产品推荐

