WordPress 禁止右键和复制文本:4 种方法详解,含插件与代码教程
在动手之前,先读这段话
网上很多教程只教你「怎么禁止复制」,却没告诉你一个重要的技术事实:
前端的所有禁止复制手段,都只能防普通用户,防不了有基本技术知识的人。
以下几种方式,任何熟悉浏览器的人都能绕过你的防护:
- 禁用 JavaScript:浏览器设置里关掉 JS,所有基于 JS 的禁止复制代码立即失效
- 查看源代码:Ctrl + U(或右键 → 查看页面源代码),内容全部可见可复制
- 开发者工具:F12 → Elements 面板,直接查看并复制 DOM 里的文字
- 打印为 PDF:Ctrl + P → 保存为 PDF,文字全部可提取
所以,禁止复制的本质是提高普通用户的操作门槛,对有经验的开发者或内容抓取机器人几乎没有实质阻拦效果。
外贸站主和教程博主特别注意:
- 外贸产品展示站:禁止右键会让部分用户无法正常保存图片、无法在新标签打开链接,影响正常使用体验,买家可能直接离开
- 教程 / 代码类博客:如果你的文章里有代码示例,禁止复制会让读者无法复制代码去使用,直接降低文章的实用价值,读者体验极差
- 以上两种情况,建议不要启用全站禁止复制
适合启用禁止复制的场景:
- 报价单、产品规格 PDF 展示页(防止竞品直接截取价格)
- 付费内容区域(配合密码保护插件使用)
- 原创设计作品展示页
明白了这一点,再来选择方法。
方法一:安装插件(不需要动代码,新手首选)
插件1:WP Content Copy Protection & No Right Click
官方地址: https://wordpress.org/plugins/wp-content-copy-protector/
安装量: 100,000+(来源:wordpress.org) 评分: 4.8/5(来源:wp-buy.com,4.8+ million downloads) 价格: 免费版 + Pro 付费版
免费版保护范围:
WP Content Copy Protection & No Right Click 使用 JavaScript + CSS 双重技术,禁用以下常见的复制方式:
- 鼠标右键菜单
- 文本选中拖放
- 图片拖放保存
- 键盘快捷键:Ctrl+A(全选)、Ctrl+C(复制)、Ctrl+X(剪切)、Ctrl+U(查看源码)、Ctrl+S(保存)、Ctrl+P(打印)
安装和使用步骤:
WordPress 后台 → 插件 → 安装插件 → 搜索 WP Content Copy Protection
找到作者页面为 WP-buy.com 的插件,安装并启用
相关教程:WordPress 插件安装教程
进入 设置 → WP Content Copy Protection
填写「警告提示文字」(用户尝试复制时显示的提示,如「内容受版权保护」)
选择保护范围(全站 / 仅文章 / 仅页面 / 排除特定页面)
点击保存
Pro 版新增功能
- 右键菜单自定义(显示自定义菜单而非直接禁用)
- 图片实时水印
- F12 开发者工具禁用
- 按 IP 地址白名单排除
插件2:WP Content Copy Protection with Color Design
官方地址: https://wordpress.org/plugins/wp-copy-protect-with-color-design/
最新版本: 2.4.2(兼容 WordPress 6.8) 价格: 免费版可用,F12 禁用需付费
与插件 A 的主要区别:
这款插件的特色是可以自定义「复制提示弹窗的颜色」,让弹窗样式与你的网站主题配色保持一致,视觉上更统一。同时支持对特定页面和文章排除保护(设为可正常复制),粒度控制更灵活。

设置路径:
安装启用插件后 → 后台 → 设置 → WP Protect Setting
可配置项:
- Disable right mouse click:右键时是否显示提示信息(可自定义提示文字,上限 159 字符)
- 自定义弹窗颜色
- 排除特定页面/文章不受保护
方法二:CSS 代码(最轻量,仅禁止文字选中)
如果你只需要「禁止鼠标选中文字」这一个效果,不需要插件,用一段 CSS 就能实现。
操作路径:
WordPress 后台 → 外观 → 自定义(Customize)→ 额外 CSS(Additional CSS)
粘贴以下代码:
css
/* 禁止全站文字选中 */
* {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Chrome / Safari / Opera */
-khtml-user-select: none; /* Konqueror */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE / Edge */
user-select: none; /* 标准写法 */
}
只保护特定区域(推荐这种精准控制方式):
如果你只想保护文章正文,不想影响导航菜单、搜索框等交互元素,可以只对文章内容区域的类名应用:
css
/* 只保护文章内容区域(根据你的主题调整类名)*/
.entry-content,
.post-content,
.article-body {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* 表单输入框必须保持可选中,否则用户无法填写 */
input, textarea, select {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
CSS 方法的局限:
CSS user-select: none 只是禁止了通过鼠标拖拽来选中文字,并不影响:
- 键盘快捷键(Ctrl+A 全选后 Ctrl+C 复制)
- 浏览器地址栏直接复制内容
- 开发者工具查看和复制
所以,CSS 方法是这 4 种里保护强度最低的,但对性能影响也最小。
方法三:JavaScript 代码(同时禁止右键 + 选中 + 快捷键)
通过 JavaScript 可以实现更全面的禁止效果:同时禁止右键菜单、文字选中、图片拖动、以及常用的键盘复制快捷键。
添加方式(通过子主题 functions.php,推荐方式):
在子主题的 functions.php 文件末尾添加:
php
function add_copyright_protection() {
// 只在前端加载,后台不加载
if ( ! is_admin() ) {
wp_enqueue_script(
'copyright-protection',
get_stylesheet_directory_uri() . 'https://cdn.blog.ctzpj.com/js/copyright.js',
array(),
'1.0',
true // 放在页面底部加载
);
}
}
add_action( 'wp_enqueue_scripts', 'add_copyright_protection' );
然后在子主题目录下新建 /js/copyright.js 文件,内容如下:
javascript
// 禁止右键菜单
document.oncontextmenu = function() {
return false;
};
// 禁止图片拖放
document.ondragstart = function() {
return false;
};
// 禁止文字选中(保留 input/textarea/password 输入框的正常功能)
document.onselectstart = function(e) {
var target = e.target || e.srcElement;
var tagName = target.tagName ? target.tagName.toUpperCase() : '';
var inputType = target.type ? target.type.toLowerCase() : '';
if (tagName === 'INPUT' || tagName === 'TEXTAREA' || inputType === 'password') {
return true; // 表单输入框保持正常
}
return false; // 其他区域禁止选中
};
// 禁止键盘快捷键(Ctrl+C / Ctrl+A / Ctrl+X / Ctrl+U / Ctrl+S)
document.onkeydown = function(e) {
// 检测 Ctrl 或 Meta(Mac 的 Command 键)
if (e.ctrlKey || e.metaKey) {
var key = e.key ? e.key.toLowerCase() : String.fromCharCode(e.keyCode).toLowerCase();
if (['c', 'a', 'x', 'u', 's'].includes(key)) {
return false;
}
}
return true;
};
// 禁止 iframe 嵌入(防止被其他网站引用)
if (window.top !== window.self) {
window.top.location.replace(window.self.location.href);
}
排除管理员账号(必须配置,否则自己也无法复制后台内容)
不管用哪种方法,都必须设置管理员账号排除——否则你自己登录后台也无法正常复制文字,会严重影响日常操作。
插件方式:
WP Content Copy Protection 系列插件通常在设置里有「排除管理员」选项,确保勾选「Disable for Admin」。
JavaScript 代码方式(需要配合 WordPress 条件判断):
在 functions.php 里的加载函数中加入管理员排除判断:
php
function add_copyright_protection() {
// 已登录的管理员不加载防复制脚本
if ( ! is_admin() && ! current_user_can( 'manage_options' ) ) {
wp_enqueue_script(
'copyright-protection',
get_stylesheet_directory_uri() . 'https://cdn.blog.ctzpj.com/js/copyright.js',
array(),
'1.0',
true
);
}
}
add_action( 'wp_enqueue_scripts', 'add_copyright_protection' );
current_user_can( 'manage_options' ) 会检测当前用户是否拥有管理员权限,有权限的用户不会加载防复制脚本。
CSS 方式排除管理员:
WordPress 会给管理员登录状态下的 <body> 标签加上 .logged-in 类名,利用这个可以排除:
css
/* 排除已登录管理员 */
body:not(.logged-in) * {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
/* 所有情况下保留表单可用性 */
body input,
body textarea,
body select {
-webkit-user-select: text;
user-select: text;
}
⚠️ 注意:
.logged-in对所有已登录用户生效,不仅仅是管理员。如果你允许会员注册,这个方案会让所有登录用户都能正常复制。精确排除只有管理员,需要用 PHP + JS 的方案。
方法四:排除特定页面不受保护
如果你的网站同时有「需要保护的内容页」和「需要允许复制的代码教程页」,可以对特定页面单独排除保护。
通过 WP Content Copy Protection with Color Design 插件:
进入插件设置 → 找到「排除页面」选项 → 输入不需要保护的文章 ID 或页面 ID(以逗号分隔),这些页面的访客可以正常选中和复制。
通过 WordPress 条件标签(代码方式):
在 functions.php 里加入页面判断:
php
function add_copyright_protection() {
if ( ! is_admin() && ! current_user_can( 'manage_options' ) ) {
// 排除特定页面(把 123、456 换成你实际的页面 ID)
$excluded_page_ids = array( 123, 456 );
if ( ! is_page( $excluded_page_ids ) ) {
wp_enqueue_script(
'copyright-protection',
get_stylesheet_directory_uri() . 'https://cdn.blog.ctzpj.com/js/copyright.js',
array(),
'1.0',
true
);
}
}
}
add_action( 'wp_enqueue_scripts', 'add_copyright_protection' );
4 种方法对比
| 方法 | 保护强度 | 技术难度 | 排除特定页面 | 排除管理员 | 适合谁 |
|---|---|---|---|---|---|
| 插件 A(WP Copy Protection) | ⭐⭐⭐⭐ | ⭐(极简) | ✅ 支持 | ✅ 可配置 | 新手,全站保护 |
| 插件 B(Color Design 版) | ⭐⭐⭐ | ⭐(极简) | ✅ 支持 | ✅ 可配置 | 需要自定义弹窗样式 |
| CSS 方法 | ⭐⭐ | ⭐⭐ | ✅ 灵活 | ⚠️ 有限制 | 只需禁止鼠标选中 |
| JavaScript 方法 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ 灵活 | ✅ 精确控制 | 有一定技术基础 |
常见问题
禁止复制之后,Google 爬虫还能正常抓取网站内容吗?
能。robots.txt Disallow 才会阻止 Google 抓取,前端的 CSS 和 JavaScript 禁止复制对 Google 爬虫完全无效——Googlebot 不执行 JavaScript,直接读取 HTML 源代码,你的内容照样被正常收录。两者是完全不同层面的设置,不会互相影响。
插件启用后,自己后台也不能复制了怎么办?
进入插件设置,找到「Disable for Admin」或类似选项,勾选排除管理员。如果找不到这个设置,按本文「排除管理员」一节提供的代码方案处理。
用户用手机访问,禁止复制还有效吗?
移动端效果有限。iOS 和部分 Android 系统对 user-select: none 的响应不同,长按选中文字可能仍然有效。而且移动端用户通常没有开发者工具,所以对于普通用户还是有一定阻止效果的。
禁止复制会影响网站 SEO 吗?
不会,理由见上面第一条 FAQ。但有一个间接影响值得注意:如果用户因为无法复制产品参数/询盘邮箱而感到不便,可能会提高跳出率,而高跳出率是负面的用户行为信号。所以对于外贸站,建议只对特定内容区域启用保护,不要全站禁止。
用了防复制插件,内容还是被别人的网站直接搬运了,为什么?
如你所知,前端防护无法阻止技术手段。内容被搬运通常有两条路:① 关闭 JS 后直接复制 ② 用爬虫抓取 HTML 源码。要真正防止内容被抓取,需要结合 WAF(如 WPHOS Edge™)拦截恶意爬虫,以及在转载时通过 Google Search Console 提交原创内容以确保优先收录。
教程类外贸博客适合用禁止复制吗?
通常不建议。如果你的文章里有代码示例或命令行指令,禁止复制会让读者非常痛苦,直接降低文章的实用价值。可以考虑折中方案:对普通文本内容启用保护,但对 <pre> 和 <code> 代码块区域明确 user-select: text,允许代码被复制。