博客 / WordPress/ WordPress 无插件实现文章末尾自动添加转载版权声明( 更新版)

WordPress 无插件实现文章末尾自动添加转载版权声明( 更新版)

WordPress 无插件实现文章末尾自动添加转载版权声明( 更新版)

不使用插件在 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.selectionevent.returnValue,现已更新为现代 Web 标准 API(window.getSelection()event.preventDefault())。
  • 优先使用现代的 navigator.clipboard API,并提供了旧浏览器的回退方案,兼容性更好。
  • 使用 esc_js() 函数对 PHP 输出的变量进行转义,防止 JavaScript 注入问题,提升安全性。
  • 添加了非空判断,避免在未选中文本时触发。

注意事项

  1. 备份主题文件:在修改任何主题文件(如 single.php, footer.php)前,请务必进行备份。
  2. 子主题:建议在子主题中进行修改,避免主题更新时更改被覆盖。
  3. 方法二限制:JavaScript 复制版权的方法依赖于浏览器剪贴板 API,在某些浏览器或安全设置下可能失效,且对移动端兼容性不一。它通常作为辅助手段,而非唯一的版权保护措施。

提示:如果您希望更灵活地管理声明内容(如不同分类使用不同声明),或避免直接修改代码,建议考虑使用专门的插件(如 "WP Content Copy Protection & No Right Click")。但对于追求轻量化、学习主题开发或实现简单功能而言,以上无插件方案是很好的起点。

  1. 老牛,我想问一下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
    }

    然后就出现网站空白了,请问下要怎么修改

    1. 我马上发一篇文章, 你跟着改

回复 小李 取消回复

您的邮箱不会公开。必填项已用 * 标注。