Rapls Copy Notice マニュアル — どこがコピーされたかを知る

Rapls Copy Notice マニュアル
Rapls Copy Notice / Manual

Free plugin manual

Rapls Copy Notice マニュアル
どこがコピーされたかを知る

訪問者が投稿の本文をコピーしたとき、その文章と投稿をログに残し、テキストのメールで知らせる無料プラグインです。このページでは、すべてのタブと設定項目、通知メールの中身、データの扱いを説明します。

バージョン 1.3.17 | WordPress 6.3 以上 | PHP 8.2 以上 | GPLv2 以降

無料プラグインだけで完結します。 機能を絞ったお試し版ではなく、期間や件数の制限もありません。このマニュアルに書いてあることは、すべてこのプラグインだけで動きます。

01

このプラグインについて

読者が投稿の本文を選んでコピーすると、コピーされた文章・投稿・日時などを記録し、サイトの管理者にメールで知らせます。どの段落がよく持っていかれるのかが、あとから確認できます。

  • コピーを止めません。 右クリックの禁止や選択の禁止はしません。読者はいつもどおり選択・コピー・右クリックできます。
  • ログ:日時・投稿・コピーされた文章・短くした IP アドレス・ブラウザーを一覧で見られます。投稿で絞り込み、選んだ行やすべての行を削除できます。
  • メール:1 時間に 1 通のまとめ(既定)か、コピーごとに 1 通(1 時間あたりの上限つき)。本文はテキストのみです。
  • 対象を絞る:既定では 20 文字以上、本文の中だけ、投稿と固定ページだけ。ログイン中の管理者と編集者のコピーは数えません。
  • 外部と通信しません。 報告は自分のサイトにだけ送られ、メールは WordPress のメール機能で送ります。Cookie を使わず、訪問者のブラウザーには何も保存しません。回数の制限のためだけに、IP アドレスを元に戻せない形に変えた値を最長1時間使います。
  • 古い記録は消えます。 既定では 90 日を過ぎた記録を毎日削除します。

コピーが記録されるまで

  1. 監視対象の投稿を 1 件表示しているページで、読者が本文の中の文章をコピーします。
  2. ページに読み込まれた小さなスクリプトが、選択された文字数と範囲を確かめます。条件を満たすと、文章(最大 500 文字)と投稿 ID をサイトの REST API(/wp-json/rapls-copy-notice/v1/log)に送ります。
  3. サイト側で、回数の上限、投稿が公開中で監視対象か、除外する IP・投稿かを確かめてから、専用のテーブルに 1 行保存します。
  4. まとめモードなら次の毎時の処理で、即時モードならその場でメールを送ります。

02

動作環境

WordPress6.3 以上
PHP8.2 以上。これより古い PHP では動かず、管理画面に「PHP 8.2 以上が必要で、このサイトの PHP は〇〇」という通知を出します。エラーでサイトが止まることはありません。
メールWordPress からメールが送れること(wp_mail())。SMTP プラグインを使っている場合は、そちらの設定どおりに送られます。
REST APIログインしていない訪問者が /wp-json/rapls-copy-notice/v1/log に POST できること。
HTTPSなくても記録できます。段落の識別(後述の Copies of this paragraph)だけは、ブラウザーの都合で HTTPS のページでしか働きません。

03

インストールと最初の確認

  1. 管理画面で プラグイン → 新規追加 を開き、「Rapls Copy Notice」を検索します。
  2. 今すぐインストール → 有効化 を押します。
  3. これで動き始めます。設定を保存する必要はありません。

有効化した直後の動きは次のとおりです。

  • 投稿と固定ページの本文から 20 文字以上コピーされると記録します。
  • 記録は 1 時間に 1 回まとめて、サイトの管理者メールアドレス(設定 → 一般)に送ります。
  • ログイン中の管理者・編集者のコピーは数えません。
  • IP アドレスは短くしてから保存し、記録は 90 日で消えます。

動作を確かめる

  1. ブラウザーのプライベートウィンドウ(シークレットウィンドウ)で、公開中の投稿を 1 件開きます。ログインしたままだと数えられません。
  2. 本文から 20 文字以上を選んでコピーします。
  3. 管理画面の ツール → Rapls Copy Notice を開くと、Log(ログ)タブに 1 行増えています。
  4. メールは次の毎時の処理で届きます。すぐ確かめたいときは、Notifications タブで「One email per copy, right away」(コピーごとにすぐ 1 通)に切り替えてから、もう一度コピーしてください。

記録されないときは 困ったとき を見てください。多くはテーマの本文の囲み方が原因で、Detection タブの設定 1 つで直ります。

04

管理画面の構成

画面は ツール → Rapls Copy Notice の 1 ページだけで、上のタブで切り替えます。見られるのは manage_options 権限のあるユーザー(通常は管理者)です。

タブ内容
Logログ記録されたコピーの一覧。絞り込みと削除。
Notifications通知メールの宛先、件名、送るタイミング。
Detection検出何文字から数えるか、どの投稿タイプか、本文の場所、除外、回数の上限、プロキシ。
PrivacyプライバシーIP アドレスの短縮、保存期間、プライバシーポリシーの文例。
Visitors読者向けコピーした読者へのメッセージと、出典の自動追加(どちらも既定でオフ)。

設定はタブごとに保存します。変更を保存 を押すと、そのタブの項目だけが保存され、「Settings saved.」と表示されます。数値の欄に範囲外の数を入れると上限か下限に合わせ、数字でないものを入れると既定値に戻します。

プラグイン 画面のこのプラグインの行にも、Log と Settings(Notifications タブを開きます)のリンクがあります。

05

Log(ログ)タブ

Rapls Copy Notice のログ画面。日時、投稿、コピーされた文、短くした IP アドレス、ブラウザーが並び、投稿で絞り込める
Log タブ。画面は、日本語訳を入れた状態で撮っています。無料版の日本語訳は translate.wordpress.org から配信されるまで、管理画面は英語で表示されます。

列

列表示する内容
Date日時コピーされた日時。サイトのタイムゾーンと日付・時刻の形式(設定 → 一般)で表示します。この列で並べ替えできます(既定は新しい順)。
Post投稿投稿のタイトルと ID。タイトルは投稿へのリンクです。行にマウスを乗せると Show only this post(この投稿だけ表示)が出ます。
Copied textコピーされた文章先頭 80 文字と、元の選択の文字数(「120 characters」など)。マウスを乗せると、保存した文章(最大 500 文字)がツールチップで出ます。段落の識別がある行には Copies of this paragraph が出ます。
IP保存した IP アドレス。既定では短くした形(例 203.0.113.0)です。
Browserブラウザー「Chrome on macOS」のような要約。マウスを乗せるとユーザーエージェントの全文が出ます。参照元があれば、その下に「from www.google.com」のようにホスト名を表示します。

何も記録がないときは「No copies recorded yet.」と表示します。

投稿で絞り込む

一覧の上の All posts(すべての投稿)のプルダウンで投稿を選び、Filter を押します。プルダウンには、ログに出てくる投稿がコピーの多い順に並びます(最大 200 件)。Post 列の Show only this post でも同じ絞り込みになります。

Copies of this paragraph(この段落のコピー)

コピーするたびに、そのコピーが始まった段落の「指紋」も記録します。段落の文章から読者のブラウザーで計算した SHA-1 ハッシュで、段落の文章そのものは保存しません。Copies of this paragraph を押すと、同じ投稿の同じ段落からのコピーだけを並べます。上に「Showing one paragraph only.」と出るので、Show all paragraphs で元に戻します。

  • 段落とみなすのは、本文の中の p・li・blockquote・pre・見出し(h1〜h6)・表のセル・dt/dd・figcaption です。
  • 段落の文章を 1 文字でも書き換えると、別の段落として扱われます。
  • ブラウザーがハッシュの機能を HTTPS のページでしか提供しないため、HTTP のサイトではこのリンクが出ません。コピーの記録そのものは HTTP でも行います。

削除する

  • 選んだ行:左のチェックボックスで選び、一括操作の Delete → 適用。「〇 entries deleted.」と表示します。
  • すべて:一覧の下の Delete all entries。確認のダイアログ(「Delete every log entry? This cannot be undone.」)で OK を押すと全件消えます。元に戻せません。

1 ページの表示件数は、画面右上の 表示オプション で変えられます(既定 20、1〜200)。

06

Notifications(通知)タブ

通知タブ。通知先のアドレス、件名の見出し、1 時間ごとのまとめか 1 件ずつかの選択、テストメールのボタン
Notifications タブ
通知メールの実例。テキストのみで、コピーされた文を引用し、投稿と URL、文字数を並べる
届いたまとめメールの例(件名のサイト名は見本に置き換えています)
項目内容既定値
Send notifications to通知の送信先通知メールの宛先を 1 つ。空のままなら、サイトの管理者メールアドレスに送ります。管理者アドレスはメールを送るときに読むので、設定 → 一般 で変えるとそのまま追従します。正しくないアドレスは保存せず、空に戻します。空(管理者アドレス)
Email subjectメールの件名件名の真ん中に入る文言。件名は常に「[サイト名] この文言 (〇 copies)」の形になるので、メールソフトの振り分けに使えます。訪問者が送ったデータは件名に入りません。改行は取り除きます。最大 100 文字Copy notification
When to send送るタイミングOne summary email per hour(1 時間に 1 通のまとめ)か、One email per copy, right away(コピーごとにすぐ 1 通)。1 時間に 1 通
Instant email limit即時メールの上限即時モードで 1 時間に送るメールの上限。超えた分は送らずに残し、次の毎時のまとめに入れます。1〜1000 通 / 時20

まとめメールの送られ方

  • 毎時の処理は WP-Cron で動きます。WP-Cron はサイトにアクセスがあったときに動くので、アクセスの少ないサイトでは、毎時ちょうどではなく、その後の最初のアクセスで送られます。
  • まだ知らせていない記録がなければ、メールは送りません。
  • 1 通に詳しく載せるのは 100 件までです。それを超えた分は「…and 〇 more. See the log screen for all of them.」と件数だけ書きます。1 回の処理で扱うのは最大 5,000 件です。
  • メールが送れなかった記録は「知らせ済み」にならず、次のまとめで送り直します。

07

通知メール

メールは常にテキスト形式(text/plain; charset=UTF-8)で送ります。HTML のメールにはしません。件名はサイト名・Email subject の文言・件数だけでできていて、投稿のタイトルやコピーされた文章は入りません。

件名: [サンプルブログ] Copy notification (2 copies)
宛先: you@example.com
Content-Type: text/plain; charset=UTF-8
---------------------------------------------------
It appears that the following text was copied.
---------------------------------------------------

> ドリップの前に、ペーパーフィルターをお湯でさっと湿らせておきます。

Date: 2026年10月9日 3:14 PM
Post: ハンドドリップの基本
URL: https://example.com/hand-drip/
Length: 33 characters
IP: 203.0.113.0
Browser: Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1
Referrer: www.google.com
---------------------------------------------------

> 蒸らしの時間は 30 秒ほど。粉がふくらみきるまで待ちます。

Date: 2026年10月9日 3:40 PM
Post: ハンドドリップの基本
URL: https://example.com/hand-drip/
Length: 30 characters
IP: 2001:db8:85a3::
Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36
---------------------------------------------------

Log: https://example.com/wp-admin/tools.php?page=rapls-copy-notice
Settings: https://example.com/wp-admin/tools.php?page=rapls-copy-notice&tab=notifications

まとめメールの見本。即時モードでも形は同じで、1 通に 1 件です。固定の文言は、翻訳が配信されるまで英語で届きます。

行内容
> で始まる行コピーされた文章の先頭 200 文字。改行を含む文章も 1 行ずつ > を付けて引用するので、文章がほかの項目になりすますことはありません。
Dateサイトの日付・時刻の形式とタイムゾーンで表示します。
Post / URL投稿のタイトルとパーマリンク。投稿が削除されていれば ID だけを書きます。
Length元の選択の文字数。保存する文章は 500 文字までですが、ここには選択全体の長さが出ます。
IP保存した IP アドレス(既定では短くした形)。
Browserユーザーエージェントの全文(最大 255 文字)。
Referrer読者がその前に見ていたページのホスト名。わからないときはこの行を省きます。
Log / Settingsログ画面と Notifications タブへのリンク。

08

Detection(検出)タブ

検出タブ。最小の文字数、対象の投稿タイプ、本文の範囲、無視する役割・IP アドレス・投稿、信頼するプロキシ、回数の上限
Detection タブ
項目内容既定値
Characters to detect検出する文字数この文字数以上のコピーを記録します。前後の空白は数えません。ブラウザーとサイトの両方で確かめます。1〜500 文字以上20
Post types投稿タイプ監視する投稿タイプ。公開されている投稿タイプ(メディアを除く)が並びます。選んだタイプの個別ページだけでスクリプトを読み込みます。トップページやアーカイブでは数えません。投稿・固定ページ
Find the post body本文を見つけるオンにすると、本文の最後に空の非表示要素を 1 つ足し、その親要素を本文の範囲として使います。テーマのクラス名に頼らずに本文を見つけられます。オンのとき、下の Content area は予備になります。オフ
Content area本文の範囲本文を囲む要素の CSS セレクター。カンマ区切りで、ページで最初に見つかったものを使います。範囲の外からのコピーは数えません。英数字と一般的なセレクター記号以外を含むと、既定値に戻します。最大 500 文字.entry-content, .post-content, article
Ignore logged-inログイン中は無視ここで選んだ権限グループでログインしているユーザーには、検出のスクリプトを読み込みません。投稿者や購読者などは、選ばなければ数えます。管理者・編集者
Ignore IP addresses無視する IP アドレス1 行に 1 つ(カンマ区切りも可)。192.0.2.0/24 のような CIDR 表記も使えます。短くする前の IP と照合するので、完全なアドレスで書けます。正しくない行は保存しません。最大 500 件空
Ignore posts無視する投稿投稿 ID を 1 行に 1 つ。その投稿ではスクリプトを読み込まず、届いた報告も保存しません。最大 500 件空
Trusted proxies信頼するプロキシリバースプロキシや CDN の IP アドレス(CIDR 可)。サイトがその後ろにないなら空のままにします。詳しくは リバースプロキシと CDN。最大 500 件空
Limit per IPIP ごとの上限1 つの IP アドレスから 1 分間に受け付ける報告の数。1〜1000 / 分10
Limit for the siteサイト全体の上限サイト全体で 1 時間に受け付ける報告の数。どちらかの上限を超えた報告は、保存もメールもしません。1〜100000 / 時500

数えるコピー、数えないコピー

  • 選択の全体が本文の範囲(Content area か、Find the post body の目印の親要素)の中にあるときだけ数えます。本文とサイドバーにまたがる選択は数えません。
  • 同じ文章を 10 秒以内にもう一度コピーしても、2 回目は送りません。
  • サイトが受け付けるのは、公開中で、監視対象の投稿タイプの投稿への報告だけです。下書きやプレビューは数えません。
  • 無視する IP・無視する投稿に当たった報告は、ほかの報告と同じ応答を返して黙って捨てます。

Find the post body をオンにするとき

テーマが本文を .entry-content・.post-content・article のどれでも囲んでいないとき、または article がコメント欄まで含んでいて範囲が広すぎるときに使います。オンにすると、監視するページの本文の最後に次の要素が 1 つ入ります。

<span class="rapls-cn-content-marker" hidden></span>

入れるのはメインループの中の、表示中の投稿の本文だけです。抜粋、ウィジェット、フィードには入れません。テーマがすでに上のセレクターのどれかを使っているなら、オフのままで構いません。

09

Privacy(プライバシー)タブ

プライバシータブ。IP アドレスを短くしてから保存する設定、ログの保存期間、プライバシーポリシーの文例へのリンク
Privacy タブ
項目内容既定値
IP addressesIP アドレスShorten IP addresses before storing them(保存する前に短くする)。IPv4 は最後の区切り、IPv6 は下位 80 ビットを 0 にしてから保存します。オフにすると完全なアドレスを保存します。オン
Keep records for記録の保存期間この日数より古い記録を、1 日 1 回の処理で削除します。1〜3650 日90
Privacy policyプライバシーポリシーSuggested text for your privacy policy のリンクから、WordPress の 設定 → プライバシー のポリシーガイドを開きます。—

短くした例:203.0.113.45 → 203.0.113.0、2001:db8:85a3:1:2:3:4:5 → 2001:db8:85a3::。設定を変えても、すでに保存した記録は書き換えません。

プライバシーポリシーの文例

ポリシーガイドに追加する文例は 3 段落で、次の内容です(文例は英語で、翻訳が配信されるとサイトの言語になります)。

  • 投稿の文章をコピーすると、コピーした文章(最大 500 文字)、選択の長さ、どの投稿か、日時、ブラウザーのユーザーエージェント、参照元ページのホスト名、IP アドレスを記録すること。IP アドレスは既定で短くしてから保存すること。
  • 記録は、どの内容がコピーされているかを管理者にメールで知らせるために使い、メールはサイトのメールの仕組み (外部のメール事業者のこともある) を通ること。それ以外は誰にも渡さず、外部のサービスにも送らないこと。ブラウザーには Cookie も識別子も保存せず、IP アドレスを元に戻せない形に変えた値を最長1時間だけ使うこと。
  • 記録は〇日後に自動で削除されること(〇には Keep records for の日数が入ります)。

IP の短縮をオフにした場合や、Visitors タブの機能を使う場合は、文例をサイトの実際に合わせて直してください。

10

Visitors(読者向け)タブ

コピーした読者の側で何かを起こす機能です。どちらも既定でオフで、オンにしない限り読者からは何も見えません。

訪問者タブ。コピー後のメッセージと、コピーした文に付ける出典の行。どちらも既定でオフ
Visitors タブ
読者が記事の文をコピーしたあと、画面の下に出るメッセージ
読者がコピーしたあとに出るメッセージ
コピーした文を貼り付けると、後ろに投稿のタイトルと URL の出典の行が付く
貼り付けた文に付く出典の行
項目内容既定値
Message after copyingコピー後のメッセージShow a short message to the reader after they copy。画面の下に 5 秒間メッセージを出します。クリックすると消えます。コピーは止めません。オフ
Messageメッセージ表示する文。テキストのみで、HTML は使えません。空なら右の既定の文を使います。最大 200 文字Thank you for reading. If you quote this article, please link to it.
Source link出典リンクAdd the post title and URL to copied text。コピーした文章の後ろに、空行をはさんで「ラベル 投稿タイトル」と、次の行に URL を付けます。入力欄や編集できる領域からのコピーには付けません。オフ
Labelラベルタイトルの前に付ける文字。空なら既定の文字を使います。最大 50 文字Source:
Applies to対象説明だけの行です。どちらの機能も Detection タブの条件に従い、記録の対象になるコピー(最小文字数以上・本文の中・監視対象の投稿タイプ・無視しない訪問者)にだけ働きます。—

Source link をオンにしたときに読者のクリップボードに入る文章の例:

ドリップの前に、ペーパーフィルターをお湯でさっと湿らせておきます。

Source: ハンドドリップの基本

https://example.com/hand-drip/

書式を保てるエディターに貼った場合は、元の書式のまま、最後に投稿へのリンクが付いた 1 行が入ります。

既定の文(メッセージと「Source:」)は、空欄のままにしておくとサイトの言語に従います。翻訳が配信される前は英語です。日本語で出したいときは、欄に日本語で書いてください(例:「出典:」)。

11

ダッシュボードウィジェット

管理画面の ダッシュボード に「Rapls Copy Notice」というウィジェットが出ます。見えるのは manage_options 権限のあるユーザーだけです。

  • 直近 7 日間のコピーの数(例:「12 copies in the last 7 days」)。
  • Most copied posts:直近 7 日間でコピーの多い投稿の上位 3 件と、それぞれの件数。投稿名を押すと、その投稿で絞り込んだログを開きます。
  • View the log:Log タブへのリンク。

ウィジェットに出す文字は投稿のタイトルだけで、コピーされた文章は出しません。不要なら、ダッシュボードの 表示オプション で隠せます。

ダッシュボードのウィジェット。直近 7 日間のコピー数と、よくコピーされた投稿の上位 3 件
ダッシュボードのウィジェット

12

サイトヘルス

ツール → サイトヘルス の「ステータス」に 4 つの検査を追加します。どれもサイトの中の状態を見るだけで、外部への通信はしません。問題があるときは、直す場所へのリンク(Open the settings)も出ます。

検査問題がないとき問題があるとき
ログのテーブルThe copy log table is in place重大な問題:テーブルがないか古い。プラグインを一度停止して有効化し直すと作り直します。それでも出るときは、データベースのユーザーにテーブルを作る権限がない可能性があります。
予定された処理Copy summaries and log cleanup are scheduledおすすめの改善:毎時のまとめメールか毎日の削除が、予定されていないか 1 時間以上遅れている。
通知の送信先Copy notifications have a valid addressおすすめの改善:送信先がない。記録は続きますが、メールを送れません。Notifications タブか、サイトの管理者メールアドレスを直します。
訪問者の IP アドレスVisitor IP addresses are read safelyおすすめの改善:信頼するプロキシに登録していないプロキシの後ろにあるかもしれない。リバースプロキシと CDN を参照。

IP アドレスの検査は、サイトヘルスを開いたあなた自身のリクエストを見て判断します。転送用のヘッダーがあり、かつ直接の接続元がプライベートアドレスか、Cloudflare のヘッダーがあるときに注意を出します。ヘッダーの値は使わず、表示もしません。

情報タブ

サイトヘルスの 情報 タブに「Rapls Copy Notice」の項目を追加します。サポートに問い合わせるときは、ここをコピーして貼ると状況が早く伝わります。訪問者のデータは含みません。

項目:Version/Database schema/Records stored(記録の件数)/Records in the last 7 days/Notification mode(digest か instant)/Next summary check(次の毎時の処理)/Monitored post types/Rate limits/Trusted proxies(登録数)/IP addresses shortened/Retention (days)/Rate-limit counters stored in(回数の記録先)/Message / source link for readers。

13

訪問者データの扱い

コピーの報告に含まれるものは、すべて訪問者のブラウザーから来ます。プラグインはそのすべてを信用しない前提で扱います。

表示するたびにエスケープ

コピーされた文章、ユーザーエージェント、参照元、IP アドレスは、管理画面に出すたびに、出す場所(HTML の本文・属性・URL)に合わせてエスケープします。保存のときに消毒したことを当てにしません。

テキストのメールだけ

通知は常に text/plain。件名は固定の文言・サイト名・件数だけで、訪問者が送ったものや投稿タイトルは入れません。

回数の上限

既定では 1 つの IP から 1 分に 10 件、サイト全体で 1 時間に 500 件まで。超えた報告は保存もメールもしません。

実在する投稿だけ

公開中で監視対象の投稿への報告だけを受け付けます。文章は 500 文字、ユーザーエージェントと参照元のホスト名は 255 文字で切ります。

何も返さない

受け口は状態コードだけを返し、本文は空です。送られた値を返すことはありません。

IP は短くして保存

既定では短くしてから保存します。X-Forwarded-For などのヘッダーは、信頼するプロキシとして登録した相手からのリクエストでしか使いません。

保存するもの

1 回のコピーにつき、専用テーブル({接頭辞}rapls_cn_log)に次を 1 行保存します:日時(UTC)、投稿 ID、コピーされた文章(最大 500 文字)、元の選択の文字数、IP アドレス、ユーザーエージェント(最大 255 文字)、参照元のホスト名(最大 255 文字)、段落の指紋(HTTPS のときだけ)、通知済みかどうか。参照元はホスト名だけで、URL のパスやクエリは送りません。

しないこと

  • Cookie を使わず、訪問者のブラウザーには何も保存しません (回数の制限のため、IP アドレスを元に戻せない形に変えた値を最長1時間だけ使います)。
  • 外部のサービスに何も送りません。報告は自分のサイトにだけ届き、メールは WordPress のメール機能で送ります。
  • クリップボードの中身は読みません。読むのはページで選択されている文字だけです。
  • ログや件数を wp_options に保存しません。

回数の上限の数え方

回数は WordPress の一時データ(transient)で数えます。オブジェクトキャッシュがないサイトでは、これが wp_options に入ります。量が増えないように、IP ごとのキーは 60 秒、サイト全体のキーは 1 時間で期限が切れ、自動読み込みはしません。キーには IP アドレスそのものではなく、ハッシュを使います。どこに保存しているかは、サイトヘルスの情報タブ(Rate-limit counters stored in)でわかります。

14

ページキャッシュ

ページキャッシュ(キャッシュ系プラグインやサーバーのキャッシュ)を使っていても動きます。検出のスクリプトは訪問者ごとのトークン(nonce)を使わないので、キャッシュされたページでも期限切れになりません。

  • ページに埋め込まれる設定は、投稿 ID・最小文字数・本文のセレクターと、オンにしているときの読者向けメッセージ・出典の情報だけです。訪問者ごとに変わるものはありません。
  • Detection タブや Visitors タブを変えたら、ページキャッシュを削除してください。 設定はページに埋め込まれるので、古いキャッシュには古い設定が残ります。
  • JavaScript をまとめたり遅らせたりする最適化の機能を使っていて記録されないときは、rapls-copy-notice.js を対象から外して確かめてください。
  • REST API へのアクセスはキャッシュしない設定にしてください(多くのキャッシュは POST をキャッシュしません)。

15

リバースプロキシと CDN

訪問者の IP アドレスは、通常は直接の接続元(REMOTE_ADDR)から取ります。X-Forwarded-For のようなヘッダーは、誰でも偽れるので使いません。

サイトが Cloudflare などの CDN やリバースプロキシの後ろにあると、直接の接続元はプロキシになります。そのままでは次のことが起きます。

  • ログの IP 列が、どれも同じ(プロキシの)アドレスになる。
  • IP ごとの上限(既定 1 分に 10 件)を、すべての訪問者で分け合うことになる。

設定のしかた

  1. 使っているプロキシの IP アドレスか範囲を調べます。Cloudflare なら 公開されている IP 範囲を使います。
  2. Detection タブの Trusted proxies に、1 行に 1 つ書きます(173.245.48.0/20 のような CIDR 表記可)。
  3. 保存すると、登録したアドレスから来たリクエストに限り、X-Forwarded-For を右から順に見て、登録したプロキシではない最初のアドレスを訪問者の IP とします。値が壊れていたときは、直接の接続元を使います。

使うヘッダーは X-Forwarded-For だけです。プロキシの後ろにないサイトでは、この欄は空のままにしてください。サイトヘルスの「Visitor IP addresses」の検査が、登録が必要そうかどうかの目安になります。

16

マルチサイト

  • ログのテーブル、設定、予定された処理はサイトごとです。設定は各サイトの ツール → Rapls Copy Notice で行います。ネットワーク管理画面の設定ページはありません。
  • ネットワークで有効化しても使えます。各サイトは、最初に読み込まれたときに自分のテーブルを作ります。
  • ネットワークからサイトを削除すると、そのサイトのログのテーブルも一緒に削除します(1.3.0 以降)。
  • プラグインを削除すると、ネットワーク内のすべてのサイトでデータを消します(停止と削除)。

17

開発者向け

訪問者のブラウザーから来た値は、保存したままの形で渡します。 出力する場所に合わせて、必ずエスケープしてください。id・created_at・post_id・text_length 以外は、すべて訪問者から来た値です。

フック種類内容
rapls_cn_loggedアクションコピーを保存した直後。引数は行の ID と、保存した値の配列。
rapls_cn_notification_deliveredフィルター通知をほかの経路にも届けるためのもの。届けたら true を返します。引数は $delivered・行の配列・件数・'instant' か 'digest'。
rapls_cn_email_rowsフィルター通知メールに載せる行を選びます。空の配列を返すと、その通知のメールを送りません。
rapls_cn_admin_tabsフィルター管理画面にタブを追加します(キー => ラベル)。既存のタブは置き換えられません。
rapls_cn_admin_loadアクション管理画面の出力前。引数は表示中のタブのキー。追加したタブのフォーム処理やファイルの読み込みに使います。
rapls_cn_render_tab_{key}アクション追加したタブの中身を出力します。権限の確認とエスケープはコールバック側で行ってください。

保存のたびに別の処理を走らせる例:

add_action( 'rapls_cn_logged', function ( $log_id, $row ) {
    // $row['copied_text'] などは訪問者から来た値。出力するときはエスケープする。
    error_log( sprintf( 'copy #%d on post %d', $log_id, $row['post_id'] ) );
}, 10, 2 );

ページ上のイベント rapls-cn:copy

プラグイン自身はアクセス解析のサービスに何も送りません。自分のスクリプトで解析ツールに渡したいときのために、スクリプトがコピーを報告するたびに、ページの document で rapls-cn:copy イベントを発生させます。detail には投稿 ID と選択の文字数が入ります。コピーされた文章は入りません。

document.addEventListener( 'rapls-cn:copy', function ( e ) {
    // e.detail.postId, e.detail.length
} );

イベントはブラウザーが報告を送った時点で発生します。サイト側で上限や除外によって捨てられた報告でも発生します。

18

困ったとき

何も記録されない

  1. ログアウトして試す。 管理者と編集者は既定で数えません。プライベートウィンドウで試してください。
  2. 投稿の個別ページで、本文から 20 文字以上コピーする。 トップページやアーカイブ、サイドバー、コメント欄では数えません。公開中の投稿であることも確かめてください。
  3. 本文の範囲を確かめる。 テーマが本文を .entry-content・.post-content・article のどれでも囲んでいないと、どのコピーも範囲外になります。Detection → Find the post body をオンにするか、Content area にテーマに合うセレクターを書いてください。ブラウザーの開発者ツールで本文の要素のクラス名を見ると見つかります。
  4. 除外の設定を確かめる。 Ignore IP addresses に自分の IP、Ignore posts にその投稿が入っていないか。Post types にその投稿タイプが入っているか。
  5. 続けて試しすぎていないか。 同じ文章を 10 秒以内に続けてコピーすると 2 回目は送りません。1 つの IP からは 1 分に 10 件までです。
  6. キャッシュを消す。 Detection の設定を変えたあとは、ページキャッシュを削除してください。
  7. REST API が止められていないか。 セキュリティ系のプラグインで、ログインしていない人の REST API を止めていると、報告が届きません。/wp-json/rapls-copy-notice/v1/log を許可してください。
  8. サイトヘルスを見る。 「ログのテーブル」が重大と出ていれば、記録できない状態です。プラグインを停止して有効化し直してください。

メールが遅い、届かない

  • まとめは毎時ちょうどではありません。 WP-Cron はアクセスがあったときに動くため、アクセスの少ないサイトでは、その時刻を過ぎて最初のアクセスで送られます。すぐ知りたいときは、即時モード(One email per copy, right away)にしてください。
  • WP-Cron を止めている場合:wp-config.php に DISABLE_WP_CRON があるなら、サーバーの cron で wp-cron.php を定期的に呼んでいるか確かめてください。呼んでいないと、まとめも古い記録の削除も動きません。サイトヘルスの「予定された処理」で遅れがわかります。
  • 即時モードなのにまとめで届く:1 時間の上限(Instant email limit、既定 20 通)を超えた分は、次の毎時のまとめに回ります。
  • まったく届かない:サイトヘルスの「通知の送信先」を確かめてください。アドレスが正しいなら、WordPress のメール送信そのものの問題です。迷惑メールのフォルダーと、SMTP プラグインの送信ログを確かめてください。件名の Email subject で振り分けを作っておくと探しやすくなります。

IP アドレスがどれも同じ

サイトがリバースプロキシや CDN の後ろにあり、プロキシのアドレスが記録されています。リバースプロキシと CDN の手順で、プロキシのアドレスを Trusted proxies に登録してください。登録前に保存された記録の IP は変わりません。

IP アドレスの最後が 0 になっている

故障ではありません。既定で IP アドレスを短くしてから保存しています(Privacy タブ)。

19

以前のプラグインから移る

Check Copy Contents(すでに保守されていないプラグイン)を使っていた場合も、このプラグインに移れます。コピーされた文章を記録してメールで知らせる、という同じ用途を扱いますが、一から書いた別のプラグインです。

  1. Rapls Copy Notice をインストールして有効化します。
  2. 以前のプラグインの設定がデータベースに残っていれば、最初の有効化のときに次の 3 つを引き継ぎます。
    • 通知の送信先(サイトの管理者アドレスと違う場合)
    • 最小文字数
    • 独自に設定していた件名(以前のプラグインの既定の件名は引き継ぎません)
  3. 引き継いだ値は、通常の保存と同じ検査を通してから使います。ログイン中のユーザーにも通知する設定は引き継がず、管理者と編集者は数えないままにします。
  4. 以前のプラグインが有効なあいだは、このプラグインの画面に「まだ有効で、保守されていない。設定は引き継げるものを引き継いだので停止してよい」という通知が出ます。Go to Plugins から以前のプラグインを停止してください。停止しないと、1 回のコピーでメールが 2 通届きます。

以前のプラグインの記録(過去のコピー)は移しません。

20

停止と削除

停止したとき

毎時のまとめと毎日の削除の予定を外します。ログと設定は残るので、有効化し直せばそのまま続きから使えます。

削除したとき

プラグイン 画面で停止してから 削除 を押すと、次のものを消します。元に戻せません。

  • ログのテーブル {接頭辞}rapls_cn_log(すべての記録)
  • 設定 rapls_cn_settings とデータベースのバージョン rapls_cn_db_version
  • 名前が rapls_cn_ で始まるオプションと一時データ(回数の上限のカウンターなど)すべて。ただしアドオンの rapls_cn_pro_* は残します(アドオンを削除したときに消えます)
  • 予定された処理(rapls_cn_send_digest・rapls_cn_purge_old_logs)
  • 各ユーザーの「1 ページの表示件数」の設定

マルチサイトでは、ネットワーク内のすべてのサイトで同じものを消します。記録を残したい場合は、削除する前に必要な分を控えてください。

21

よくある質問

コピーを防ぐことはできますか?

できません。このプラグインは防ぐためのものではありません。選択や右クリックを禁止すると普通の読者の邪魔になり、本気でコピーしたい人は止められません。何がコピーされているかを知らせることだけをします。

読者に何か見えますか?

既定では何も見えません。Visitors タブの 2 つの機能をオンにしたときだけ、メッセージが出たり、コピーした文章に出典が付いたりします。

Google アナリティクスなどでコピーを数えられますか?

プラグインからは送りません。ページで発生する rapls-cn:copy イベントを、自分のスクリプトで受けて送ってください。

どのプラグインの通知かを、メールで見分けたい。

Notifications → Email subject に自分で決めた文言を入れてください。件名は「[サイト名] その文言 (〇 copies)」になります。

同じ段落が何度もコピーされているか知りたい。

Log タブの Copies of this paragraph を使ってください(HTTPS のサイトのみ)。

22

アドオンについて

この無料プラグインに足す、別売りのアドオン Rapls Copy Notice Pro があります。投稿別・段落別の統計、Slack・Chatwork・Discord・Webhook への通知、通知の振り分けルール、よくコピーされる段落の Web 検索、ログの CSV 書き出しを追加します。無料プラグインの動作は、アドオンの有無で変わりません。

アドオンが入っていないあいだ、このプラグインの画面には説明だけの Pro features タブと、関連する画面の短い案内が出ます。アドオンを有効にすると消えます。表示したくない場合は、rapls_cn_show_upsell フィルターで false を返すと隠せます。

add_filter( 'rapls_cn_show_upsell', '__return_false' );
タイトルとURLをコピーしました