不使用插件在 WordPress 文章末尾添加转载声明
为保护原创内容,许多站长希望在文章末尾自动添加转载版权声明。在不使用插件的情况下,可以通过修改主题模板文件或添加 JavaScript 脚本来实现。以下是两种主流方法。
方法一:修改主题模板文件(single.php)
此方法通过编辑文章单页模板,在文章内容后固定输出声明。请根据您的主题结构,在 single.php 文件中找到输出文章内容的函数(通常是 the_content()),在其后合适位置添加以下代码:
<!-- 转载声明开始 -->
<div class="repost-notice">
<p>原文:<a rel="bookmark" title="<?php the_title(); ?>" href="<?php the_permalink(); ?>">《<?php the_title(); ?>》</a></p>
<p>转载自:<a href="<?php echo home_url(); ?>"><?php bloginfo('name'); ?></a></p>
</div>
<!-- 转载声明结束 -->
代码说明与更新:
- 原代码中的
get_settings('home')已过时,现代 WordPress 应使用home_url()函数。 - 添加了
<div class="repost-notice">容器,便于通过 CSS 进行样式控制。 - 修正了 HTML 结构,将换行标签
<br />改为段落标签<p>,使语义更清晰。
方法二:通过 JavaScript 实现复制时自动添加版权
此方法在用户复制文章内容时,自动在剪贴板文本的头部和尾部添加版权信息。您可以将以下代码添加到主题的 footer.php 文件,或通过 WordPress 自定义 HTML 工具添加到页脚。
<!-- 复制加版权开始 -->
<script type="text/javascript">
document.body.oncopy = function(event) {
event.preventDefault(); // 阻止默认复制行为
var selectedText = window.getSelection().toString(); // 获取选中的文本
if (!selectedText) return; // 如果没有选中文本,则退出
var blogName = '<?php echo esc_js(get_bloginfo("name")); ?>';
var blogUrl = '<?php echo esc_js(home_url()); ?>';
var postUrl = '<?php echo esc_js(get_permalink()); ?>';
var copyrightText = 'nn本文来源于 ' + blogName + ' (' + blogUrl + '), 原文地址:' + postUrl + 'n';
// 尝试将文本写入剪贴板
try {
navigator.clipboard.writeText(selectedText + copyrightText).then(function() {
console.log('复制成功,已添加版权信息。');
});
} catch (err) {
// 兼容旧版浏览器的写法
var clipboardData = event.clipboardData || window.clipboardData;
if (clipboardData) {
clipboardData.setData('text/plain', selectedText + copyrightText);
}
}
};
</script>
<!-- 复制加版权结束 -->
代码说明与更新:
- 原代码使用了已废弃的
document.selection和event.returnValue,现已更新为现代 Web 标准 API(window.getSelection()和event.preventDefault())。 - 优先使用现代的
navigator.clipboardAPI,并提供了旧浏览器的回退方案,兼容性更好。 - 使用
esc_js()函数对 PHP 输出的变量进行转义,防止 JavaScript 注入问题,提升安全性。 - 添加了非空判断,避免在未选中文本时触发。
注意事项
- 备份主题文件:在修改任何主题文件(如
single.php,footer.php)前,请务必进行备份。 - 子主题:建议在子主题中进行修改,避免主题更新时更改被覆盖。
- 方法二限制:JavaScript 复制版权的方法依赖于浏览器剪贴板 API,在某些浏览器或安全设置下可能失效,且对移动端兼容性不一。它通常作为辅助手段,而非唯一的版权保护措施。
提示:如果您希望更灵活地管理声明内容(如不同分类使用不同声明),或避免直接修改代码,建议考虑使用专门的插件(如 "WP Content Copy Protection & No Right Click")。但对于追求轻量化、学习主题开发或实现简单功能而言,以上无插件方案是很好的起点。
老牛,我想问一下wordpress侧边的近期评论格式是:用户名+评论的文章,我在百度上面找了方法来修改( WordPress文件夹 > wp-includes > default-widgets.php),但是修改了代码以后出现了网站空白,我想是代码上有错误:
if ( $comments ) {
// Prime cache for associated posts. (Prime post term cache if we need it for permalinks.)
$post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) );
_prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false );
foreach ( (array) $comments as $comment) {
$output .= '';
/* translators: comments widget: 1: comment author, 2: post link */
$output .= sprintf( _x( '%1$s on %2$s', 'widgets' ),
'' . get_comment_author_link() . '',
'comment_ID ) ) . '">' . get_the_title( $comment->comment_post_ID ) . ''
);
$output .= '';
}
}
我是把上面的代码修改成:
if ( $comments ) {
2
foreach ( (array) $comments as $comment) {
3
$output .= '' . 'comment_ID)) . '" title="'.get_the_title($comment->comment_post_ID).','.get_comment_date(Y-m-j).'">' . mb_strimwidth(strip_tags($comment->comment_content), 0, 45,"...") . '' . '';
4
}
5
}
然后就出现网站空白了,请问下要怎么修改
我马上发一篇文章, 你跟着改