0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

WordPress 文章版權聲明總整理:文末自動加版權簽名、複製內容自動附上出處

一手拿咖啡、一手用筆電寫程式

寫了一篇用心的文章,過幾天發現被別的網站整篇貼走、連出處都沒有,是很多站長都遇過的事。這篇整理兩種常見的做法:

  1. 每篇文章最後自動加上版權聲明(或簽名檔):不用一篇一篇手動貼。
  2. 別人複製內容時,自動在後面附上出處:貼到 Word、LINE 或其他網站時,會帶著原文連結。

先說清楚:這兩種做法都是「提醒」和「方便對方註明出處」,擋不住真的要抄的人。後面會說明原因,以及發現被抄時可以怎麼處理。

(原本另一篇〈wordpress 在文章底部加入版權信息或者修改成簽名檔〉的內容已經整合到這裡。)

程式碼要放在哪裡?

下面的 PHP 程式碼都加在子主題的 functions.php,或用 Code Snippets 外掛新增。不要直接改主題本身的檔案,主題一更新就會被覆蓋。詳細說明可以看 WordPress functions.php 實用程式碼整理。動手前記得先備份網站。

方法一:每篇文章最後自動加上版權聲明

PHP
add_filter( 'the_content', 'ahwei_post_copyright', 20 );
function ahwei_post_copyright( $content ) {
    // 只在單篇文章的本文加,其他地方不動
    if ( ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() || get_the_ID() !== get_queried_object_id() ) {
        return $content;
    }

    $notice = sprintf(
        '<div class="post-copyright"><p>本文為「%1$s」原創內容,歡迎分享,轉載請註明出處並附上原文連結:</p><p><a href="%2$s">%3$s</a></p></div>',
        esc_html( get_bloginfo( 'name' ) ),
        esc_url( get_permalink() ),
        esc_html( get_the_title() )
    );

    return $content . $notice;
}

網站名稱、文章標題、網址都會自動帶入,換網域或改網址也不用修改。開頭那一串判斷的用意:

  • is_singular( 'post' ):只在單篇「文章」頁加,頁面、首頁、分類列表都不加。想連「頁面」也加,改成 is_singular( array( 'post', 'page' ) )。
  • in_the_loop() 和 is_main_query():the_content 不只在文章本文執行,小工具、外掛也可能呼叫它。加上這兩個判斷,版權聲明只會出現在本文最後。
  • get_the_ID() !== get_queried_object_id():同一頁如果有其他文章的摘要(例如相關文章),不會被加上這一段。

改成簽名檔

文字可以自由改。例如想做成有作者名字的簽名檔,把 $notice 那一段換成:

PHP
$notice = sprintf(
    '<div class="post-copyright"><p>✎ 作者:%1$s</p><p>本文連結:<a href="%2$s">%2$s</a></p><p>轉載請註明出處,謝謝!</p></div>',
    esc_html( get_the_author() ),
    esc_url( get_permalink() )
);

加上外框樣式

再用 CSS 把它做成一個有底色、有邊框的區塊。傳統主題加在「外觀 → 自訂 → 額外 CSS」;區塊主題可以在「外觀 → 編輯器 → 樣式」裡找到額外 CSS 的設定。

CSS
.post-copyright {
  margin: 2.5em 0 1em;
  padding: 1em 1.25em;
  border: 1px solid #cfe0f5;
  border-left: 4px solid #4094ef;
  border-radius: 6px;
  background: #f5f9ff;
  font-size: 0.95em;
  line-height: 1.8;
}

.post-copyright p {
  margin: 0;
}

.post-copyright a {
  color: #c2185b;
  word-break: break-all; /* 網址太長時自動換行,手機才不會破版 */
}

舊做法:直接改 single.php

舊版教學是打開主題的 single.php,在 the_content() 下面直接貼一段 HTML。現在不建議這樣做:

  • 主題更新時 single.php 會被覆蓋,改過的東西就不見了。
  • 區塊主題(例如 Twenty Twenty-Four)根本沒有 single.php 可以改。
  • 舊程式碼把網域寫死在連結裡,換網域或網址結構就會出錯;也用了已經淘汰的 align="center" 寫法,CSS 還少了分號。

改用上面的 the_content 寫法就沒有這些問題,換主題也照樣有效。

不想寫程式的話,也可以把版權聲明存成可以重複使用的區塊,寫文章時手動插入。缺點是舊文章要一篇篇補,之後也可能忘記加。

RSS 也附上出處

有些網站會用程式自動抓 RSS 全文轉貼。在 RSS 的每篇內容後面加上原文連結,至少讓被轉貼出去的文章帶著你的出處:

PHP
add_filter( 'the_content_feed', function ( $content ) {
    return $content . sprintf(
        '<p>本文出自〈<a href="%1$s">%2$s</a>〉,原文刊登於 %3$s。</p>',
        esc_url( get_permalink() ),
        esc_html( get_the_title() ),
        esc_html( get_bloginfo( 'name' ) )
    );
} );

也可以在「設定 → 閱讀」把 RSS 的文章內容改成只輸出摘要,對方就抓不到全文。

方法二:複製內容時自動附上出處

這段程式會在讀者複製文章內容時,在最後自動加上「出處:文章標題+網址」:

PHP
add_action( 'wp_footer', 'ahwei_copy_with_source' );
function ahwei_copy_with_source() {
    if ( ! is_singular( 'post' ) ) {
        return;
    }
    ?>
    <script>
    document.addEventListener('copy', function (event) {
        var selection = window.getSelection();
        if (!event.clipboardData || !selection || selection.rangeCount === 0) return;

        var text = selection.toString();
        if (text.trim().length < 50) return; // 太短的不附加

        // 在輸入框、程式碼區塊裡複製,保持原樣
        var active = document.activeElement;
        if (active && active.matches('input, textarea, [contenteditable="true"]')) return;
        var node = selection.anchorNode;
        var el = node && (node.nodeType === 1 ? node : node.parentElement);
        if (el && el.closest('pre, code')) return;

        var url = <?php echo wp_json_encode( get_permalink( get_queried_object_id() ) ); ?>;
        var title = document.title;

        // 純文字版本
        event.clipboardData.setData('text/plain', text + '\n\n出處:' + title + '\n' + url);

        // 保留格式的版本(貼到 Word、Email 時使用)
        var box = document.createElement('div');
        box.appendChild(selection.getRangeAt(0).cloneContents());
        var p = document.createElement('p');
        var a = document.createElement('a');
        a.href = url;
        a.textContent = title;
        p.append('出處:', a);
        box.appendChild(p);
        event.clipboardData.setData('text/html', box.innerHTML);

        event.preventDefault();
    });
    </script>
    <?php
}

不打擾正常讀者的設計

複製是讀者很常用的功能,這段程式刻意做了幾個限制:

  • 選取少於 50 個字不附加:只是複製一個詞、一個電話、一個地址,不會被多塞兩行字。數字可以自己調整。
  • 程式碼區塊、輸入框裡不附加:讀者複製程式碼時,拿到的是乾淨、可以直接用的內容。
  • 原本的文字和格式都保留:只在最後多一段出處,貼到 Word 或 Email 時連結可以點。
  • 用 addEventListener 監聽:不會蓋掉其他外掛的複製功能。舊版程式碼用 document.oncopy = 的寫法,會把別的程式設定的複製功能蓋掉,而且是用「偷偷換掉選取範圍」的方式,現在改用瀏覽器標準的剪貼簿寫法比較穩定。

它擋不住真正要抄的人

  • 對方貼上後,把最後兩行刪掉就好。
  • 關掉 JavaScript、用瀏覽器的閱讀模式、直接看原始碼,都不會觸發。
  • 用程式自動抓網頁的轉貼網站,根本不會執行 JavaScript。

所以把它當成「方便有禮貌的人註明出處」的小功能就好,不要期待它能防盜。

不建議:禁止右鍵、禁止選取文字

網路上也有「禁止右鍵」「禁止選取」「禁止複製」的程式碼或外掛,不建議使用:

  • 一樣擋不住:看原始碼、關掉 JavaScript、截圖,都能拿到內容。
  • 影響正常讀者:想複製地址、電話、程式碼,或選取一個不懂的詞去查,全都不行,手機長按也失效。
  • 對輔助工具不友善:使用螢幕閱讀器、翻譯工具的讀者可能因此讀不到內容。

發現文章被抄了怎麼辦?

  • 你本來就有著作權:在台灣,文章完成時作者就享有著作權,不需要登記。版權聲明只是提醒,沒加也一樣受保護。
  • 保留證據:把對方的網頁截圖,記下網址與日期。
  • 先聯絡對方:很多時候對方只是不清楚規矩,請他註明出處或下架,通常就能解決。
  • 向平台或搜尋引擎檢舉:Google 有受理著作權侵權的移除要求,對方網站的主機商、社群平台也大多有侵權檢舉管道。

延伸閱讀

好內容是網站最重要的資產,值得用心經營,也值得好好保護。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供客製化網頁設計與 SEO 搜尋引擎優化,歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。

讓我們一起打造
您的專屬網站!