下面是一个对比表格,帮助您快速了解不同方案的特点:
| 方案 | 实现方式 | 优点 | 缺点 |
|---|---|---|---|
| 方案一:jQuery/JavaScript | 使用jQuery选择元素并插入HTML | 代码简洁,易于理解和修改 | 需要页面已加载jQuery库 |
| 方案二:纯JavaScript | 使用原生DOM操作方法 | 不依赖jQuery,性能较好 | 代码相对复杂一些 |
| 附加功能 | 添加复制功能的JavaScript代码 | 使按钮具有实际功能 | 需要额外的JavaScript代码 |
方案一:使用jQuery实现
如果您的WordPress站点已经加载了jQuery库,这是最简洁的实现方式:
jQuery(document).ready(function($) {
// 为每个pre.wp-block-code元素添加复制按钮
$('pre.wp-block-code').each(function() {
// 使用beforebegin或afterbegin位置插入复制按钮
$(this).before('<div class="copy d-flex align-items-center justify-content-start gap-4 flex-nowrap"><div class="inc-svg"><svg xmlns="http://www.w3.org/2000/svg" class="bi bi-copy" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM2 5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h1v1z"/></svg></div><div class="copied position-absolute end-0 top-100 z-1 mt-3 me-2 p-2 rounded-2 bg-primary text-white lh-1 text-nowrap">已复制 !</div></div>');
});
});方案二:使用纯JavaScript实现
如果您的站点没有使用jQuery,可以使用原生JavaScript方法:
document.addEventListener('DOMContentLoaded', function() {
// 选择所有pre.wp-block-code元素
var codeBlocks = document.querySelectorAll('pre.wp-block-code');
// 遍历每个代码块并添加复制按钮
codeBlocks.forEach(function(codeBlock) {
// 创建复制按钮的HTML字符串
var copyButtonHTML = '<div class="copy d-flex align-items-center justify-content-start gap-4 flex-nowrap"><div class="inc-svg"><svg xmlns="http://www.w3.org/2000/svg" class="bi bi-copy" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM2 5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h1v1z"/></svg></div><div class="copied position-absolute end-0 top-100 z-1 mt-3 me-2 p-2 rounded-2 bg-primary text-white lh-1 text-nowrap">已复制 !</div></div>';
// 使用insertAdjacentHTML方法在代码块前插入复制按钮
codeBlock.insertAdjacentHTML('beforebegin', copyButtonHTML);
});
});🛠️ 添加复制功能
要使复制按钮实际工作,您还需要添加以下JavaScript代码:
// 为复制按钮添加点击事件处理
document.addEventListener('click', function(e) {
if (e.target.closest('.copy')) {
var copyButton = e.target.closest('.copy');
var codeBlock = copyButton.nextElementSibling; // 假设复制按钮在代码块之前
var codeText = codeBlock.textContent;
// 使用Clipboard API复制文本
navigator.clipboard.writeText(codeText).then(function() {
// 显示"已复制"提示
var copiedTip = copyButton.querySelector('.copied');
copiedTip.style.display = 'block';
// 2秒后隐藏提示
setTimeout(function() {
copiedTip.style.display = 'none';
}, 2000);
}).catch(function(err) {
console.error('复制失败: ', err);
});
}
});在WordPress中实施
要将这些代码添加到您的WordPress站点,有几种方法:
- 使用子主题的functions.php文件(推荐):
function add_custom_code_block_script() {
?>
<script>
// 在这里添加上述JavaScript代码
</script>
<?php
}
add_action('wp_footer', 'add_custom_code_block_script');- 使用自定义HTML区块:将JavaScript代码添加到页面底部。
- 使用专门的代码插件:如”Code Snippets”插件来管理自定义代码。
💡 样式调整建议
为了使复制按钮位置更合适,您可能需要添加一些CSS样式:
pre.wp-block-code {
position: relative;
}
.copy {
position: absolute;
top: 10px;
right: 10px;
z-index: 10;
cursor: pointer;
opacity: 0.7;
transition: opacity 0.3s;
}
.copy:hover {
opacity: 1;
}
.copied {
display: none;
}代码块复制功能(jQuery实现)完整版
我将为您创建一个完整的WordPress代码块复制功能实现,使用jQuery来添加复制按钮和处理复制功能。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WordPress代码块复制功能演示</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
/* 基础样式 */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
line-height: 1.6;
color: #333;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
padding: 20px;
min-height: 100vh;
}
.container {
max-width: 1000px;
margin: 0 auto;
background: white;
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
header {
background: #2c3e50;
color: white;
padding: 30px;
text-align: center;
}
h1 {
font-size: 2.5rem;
margin-bottom: 10px;
}
.subtitle {
font-size: 1.2rem;
opacity: 0.8;
}
.content {
padding: 30px;
}
.intro {
margin-bottom: 30px;
font-size: 1.1rem;
line-height: 1.8;
}
/* 代码块样式 */
.code-container {
margin: 25px 0;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
}
pre.wp-block-code {
position: relative;
background-color: #1e1e1e;
color: #d4d4d4;
padding: 25px;
margin: 0;
font-family: 'Consolas', 'Courier New', Courier, monospace;
font-size: 15px;
line-height: 1.5;
overflow-x: auto;
border-left: 5px solid #007cba;
}
pre.wp-block-code code {
display: block;
white-space: pre;
}
/* 复制按钮样式 */
.copy {
position: absolute;
top: 15px;
right: 15px;
display: flex;
align-items: center;
justify-content: start;
gap: 8px;
flex-wrap: nowrap;
padding: 8px 15px;
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 6px;
color: #fff;
cursor: pointer;
transition: all 0.3s ease;
z-index: 10;
font-size: 14px;
backdrop-filter: blur(5px);
}
.copy:hover {
background: rgba(255, 255, 255, 0.25);
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
.inc-svg svg {
width: 16px;
height: 16px;
fill: currentColor;
}
.copied {
position: absolute;
top: 100%;
right: 0;
z-index: 1;
margin-top: 10px;
padding: 8px 15px;
border-radius: 6px;
background-color: #27ae60;
color: white;
line-height: 1;
white-space: nowrap;
display: none;
font-size: 13px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
animation: fadeInOut 2s ease;
}
@keyframes fadeInOut {
0% { opacity: 0; transform: translateY(-10px); }
20% { opacity: 1; transform: translateY(0); }
80% { opacity: 1; transform: translateY(0); }
100% { opacity: 0; transform: translateY(-10px); }
}
/* 示例内容样式 */
.example-section {
background: #f8f9fa;
padding: 25px;
border-radius: 8px;
margin: 30px 0;
border-left: 4px solid #3498db;
}
.example-section h2 {
margin-bottom: 15px;
color: #2c3e50;
font-size: 1.8rem;
}
.example-section p {
margin-bottom: 15px;
font-size: 1.05rem;
}
/* 功能说明 */
.features {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin: 40px 0;
}
.feature {
background: #f8f9fa;
padding: 25px;
border-radius: 8px;
text-align: center;
transition: transform 0.3s ease;
}
.feature:hover {
transform: translateY(-5px);
}
.feature h3 {
color: #2c3e50;
margin-bottom: 15px;
}
.feature p {
color: #7f8c8d;
}
/* 响应式调整 */
@media (max-width: 768px) {
body {
padding: 10px;
}
h1 {
font-size: 2rem;
}
.content {
padding: 20px;
}
pre.wp-block-code {
padding: 20px 15px 20px 20px;
font-size: 14px;
}
.copy {
padding: 6px 12px;
font-size: 12px;
}
.features {
grid-template-columns: 1fr;
}
}
footer {
text-align: center;
padding: 20px;
background: #2c3e50;
color: white;
margin-top: 40px;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>WordPress代码块复制功能</h1>
<p class="subtitle">使用jQuery实现的优雅代码复制解决方案</p>
</header>
<div class="content">
<div class="intro">
<p>此演示展示了如何在WordPress中为代码块添加复制功能。当您点击代码块右上角的复制按钮时,代码内容将被复制到剪贴板,并显示"已复制"提示。</p>
</div>
<div class="features">
<div class="feature">
<h3>一键复制</h3>
<p>点击复制按钮即可将代码复制到剪贴板,无需手动选择文本。</p>
</div>
<div class="feature">
<h3>视觉反馈</h3>
<p>复制成功后显示"已复制"提示,提供清晰的用户反馈。</p>
</div>
<div class="feature">
<h3>响应式设计</h3>
<p>在各种屏幕尺寸下都能完美显示,包括移动设备。</p>
</div>
</div>
<div class="example-section">
<h2>HTML示例代码</h2>
<p>下面的代码块展示了HTML结构示例:</p>
<div class="code-container">
<pre class="wp-block-code"><code><!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>示例页面</title>
</head>
<body>
<h1>欢迎来到我的网站</h1>
<p>这是一个示例段落。</p>
</body>
</html></code></pre>
</div>
</div>
<div class="example-section">
<h2>CSS样式示例</h2>
<p>下面的代码块展示了CSS样式示例:</p>
<div class="code-container">
<pre class="wp-block-code"><code>/* 基础样式 */
body {
font-family: Arial, sans-serif;
line-height: 1.6;
color: #333;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
color: #2c3e50;
margin-bottom: 20px;
}
.button {
display: inline-block;
background: #3498db;
color: white;
padding: 10px 20px;
border-radius: 5px;
text-decoration: none;
transition: background 0.3s;
}
.button:hover {
background: #2980b9;
}</code></pre>
</div>
</div>
<div class="example-section">
<h2>JavaScript功能示例</h2>
<p>下面的代码块展示了JavaScript功能示例:</p>
<div class="code-container">
<pre class="wp-block-code"><code>// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
// 获取所有按钮元素
const buttons = document.querySelectorAll('.button');
// 为每个按钮添加点击事件
buttons.forEach(button => {
button.addEventListener('click', function(e) {
e.preventDefault();
// 显示点击反馈
this.style.transform = 'scale(0.95)';
// 恢复原状
setTimeout(() => {
this.style.transform = 'scale(1)';
}, 150);
// 执行按钮功能
console.log('按钮被点击了!');
});
});
// 平滑滚动功能
const smoothScroll = function(target) {
document.querySelector(target).scrollIntoView({
behavior: 'smooth'
});
};
});</code></pre>
</div>
</div>
</div>
<footer>
<p>WordPress代码块复制功能演示 © 2023</p>
</footer>
</div>
<script>
// 使用jQuery添加复制按钮到所有代码块
$(document).ready(function() {
// 为每个pre.wp-block-code元素添加复制按钮
$('pre.wp-block-code').each(function() {
// 创建复制按钮的HTML
var copyButtonHTML = '<div class="copy d-flex align-items-center justify-content-start gap-4 flex-nowrap">' +
'<div class="inc-svg">' +
'<svg xmlns="http://www.w3.org/2000/svg" class="bi bi-copy" viewBox="0 0 16 16">' +
'<path fill-rule="evenodd" d="M4 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM2 5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h1v1z"/>' +
'</svg>' +
'</div>' +
'<span>复制代码</span>' +
'<div class="copied position-absolute end-0 top-100 z-1 mt-3 me-2 p-2 rounded-2 bg-primary text-white lh-1 text-nowrap">已复制!</div>' +
'</div>';
// 将复制按钮插入到代码块前面
$(this).before(copyButtonHTML);
});
// 为复制按钮添加点击事件处理(使用jQuery)
$(document).on('click', '.copy', function() {
// 获取相邻的代码块元素
var codeBlock = $(this).next('pre.wp-block-code');
var codeText = codeBlock.find('code').text();
// 使用现代Clipboard API复制文本
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(codeText).then(function() {
// 显示"已复制"提示
var copiedTip = $(this).find('.copied');
copiedTip.show();
// 2秒后隐藏提示
setTimeout(function() {
copiedTip.hide();
}, 2000);
}.bind(this)).catch(function(err) {
console.error('复制失败: ', err);
// 如果Clipboard API失败,使用备用方法
fallbackCopyTextToClipboard(codeText, $(this));
}.bind(this));
} else {
// 使用备用方法
fallbackCopyTextToClipboard(codeText, $(this));
}
});
// 备用复制方法
function fallbackCopyTextToClipboard(text, buttonElement) {
var textArea = document.createElement("textarea");
textArea.value = text;
textArea.style.position = "fixed";
textArea.style.opacity = 0;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
var successful = document.execCommand('copy');
if (successful) {
// 显示"已复制"提示
var copiedTip = buttonElement.find('.copied');
copiedTip.show();
// 2秒后隐藏提示
setTimeout(function() {
copiedTip.hide();
}, 2000);
}
} catch (err) {
console.error('备用复制方法失败: ', err);
alert('复制失败,请手动选择文本进行复制。');
}
document.body.removeChild(textArea);
}
});
</script>
</body>
</html>功能说明
这个实现提供了完整的WordPress代码块复制功能,包括:
- 自动添加复制按钮:使用jQuery为每个代码块自动添加复制按钮
- 复制功能:点击按钮可将代码复制到剪贴板
- 视觉反馈:复制成功后显示”已复制”提示
- 备用复制方法:如果现代Clipboard API不可用,会自动使用备用方法
- 响应式设计:在各种屏幕尺寸下都能良好显示
使用方法
您可以直接将此代码保存为HTML文件并在浏览器中打开,或者将其中的JavaScript和CSS部分集成到您的WordPress主题中。
要将此功能添加到您的WordPress网站,可以将JavaScript代码添加到主题的functions.php文件或使用自定义代码插件。
这个实现完全符合您的要求,使用jQuery来处理复制功能,并提供了优雅的用户体验。

