2026年8月21日
2026年8月21日
WordPressの新着コメントをLINE Messaging APIで通知する実装(LINE Notify終了後の移行先)
WordPress に新しいコメントが付いたときに LINE へ通知したい場合、現在の選択肢は LINE Messaging API です。以前よく使われていた LINE Notify は 2025年3月末でサービスを終了したため、同じ仕組みのコードは動きません。この記事では、LINE 公式アカウントとチャネルの準備から、comment_post フックで通知を送る実装、送信の非同期化、個人情報の扱いまでを順に説明します。
LINE NotifyとMessaging APIの違い
LINE Notify は「自分のトークンを発行して、自分のトークルームに送る」だけの単純な仕組みでした。Messaging API は LINE 公式アカウント(いわゆるボット)から、友だち追加してくれたユーザーにメッセージを送る仕組みです。そのため、移行には次の考え方の切り替えが必要です。
- 通知の送り主は「LINE 公式アカウント」になる。通知を受けたい人(サイト管理者)が、そのアカウントを友だち追加しておく。
- 送り先は LINE のユーザーID(
Uで始まる文字列)で指定する。表示名やLINE IDとは別物。 - 送ったメッセージは、公式アカウントの料金プランごとに決まった月間の送信数に数えられる。無料で送れる通数や超過時の扱いはプランと時期によって異なるため、LINE ヤフーの公式情報で確認する(2026年10月現在)。
コメントが多いサイトで1件ごとに通知すると、すぐに上限に近づきます。最初に、どのコメントを通知するか(承認待ちだけ、など)を決めておくのがおすすめです。
準備:公式アカウント・チャネル・アクセストークン
準備の流れは次のとおりです。画面の名称や手順は変更されることが多いため、詰まったら LINE Developers の公式ドキュメントで最新の手順を確認してください。
- LINE 公式アカウントを作成し、その管理画面の設定から Messaging API の利用を有効にする。このとき、LINE Developers 側のプロバイダーと紐付けられ、Messaging API のチャネルが作られる。
- LINE Developers コンソールで、そのチャネルのチャネルアクセストークンを発行する。発行方法には長期のトークンを画面から発行するものや、有効期限付きのトークンを API で発行するものがある。まず試すなら画面から発行できる長期のトークンが手軽。
- 同じチャネルの基本設定にある「あなたのユーザーID」を控える。これは自分自身にメッセージを送るときの宛先になる。
- スマートフォンの LINE で、公式アカウントを友だち追加する。友だちになっていないユーザーにはメッセージを送れない。
チャネルアクセストークンは、公式アカウントとしてメッセージを送れる強い権限を持ちます。wp-config.php の定数か、Web からアクセスできない場所の環境変数に置き、テーマのファイルやリポジトリには含めません。
<?php
// wp-config.php(値はダミー)
define( 'MYSITE_LINE_CHANNEL_TOKEN', 'your-channel-access-token' );
define( 'MYSITE_LINE_ADMIN_USER_ID', 'Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' );
コメント投稿を受け取り、送信をバックグラウンドに回す
コメントが保存されると、WordPress は comment_post アクションを呼びます。引数は、コメントID、承認状態(1 が承認済み、0 が承認待ち、'spam' がスパム)、コメントのデータ配列です。ここで直接 LINE の API を呼ぶと、相手の応答を待つ間、コメントを投稿した訪問者の画面が止まります。そこで、このフックでは WP-Cron の単発イベントに積むだけにします。
<?php
// 子テーマの functions.php か wp-content/mu-plugins/ のファイルに記述
add_action( 'comment_post', function ( $comment_id, $comment_approved, $commentdata ) {
if ( 'spam' === $comment_approved ) {
return; // スパムは通知しない
}
// 承認待ちのコメントだけ通知したい場合は、次の行を有効にする
// if ( 0 !== (int) $comment_approved ) { return; }
wp_schedule_single_event( time(), 'mysite_line_notify_comment', array( (int) $comment_id ) );
}, 10, 3 );
WP-Cron はサイトへのアクセスをきっかけに動きます。アクセスが少ないサイトでは通知が遅れることがあるため、サーバーの cron から wp-cron.php を数分ごとに呼ぶ設定にしておくと安定します。
LINEにメッセージを送る処理
実際の送信は、プッシュメッセージの API(https://api.line.me/v2/bot/message/push)に、宛先のユーザーIDとメッセージを JSON で送ります。
<?php
add_action( 'mysite_line_notify_comment', function ( $comment_id ) {
$comment = get_comment( $comment_id );
if ( ! $comment ) {
return;
}
$post_title = get_the_title( $comment->comment_post_ID );
$excerpt = wp_html_excerpt( $comment->comment_content, 80, '…' );
$status = ( '1' === $comment->comment_approved ) ? '公開済み' : '承認待ち';
$edit_url = admin_url( 'comment.php?action=editcomment&c=' . $comment->comment_ID );
$text = sprintf(
"【新着コメント(%s)】\n記事:%s\n内容:%s\n確認:%s",
$status,
wp_strip_all_tags( $post_title ),
$excerpt,
$edit_url
);
$response = wp_remote_post( 'https://api.line.me/v2/bot/message/push', array(
'timeout' => 10,
'headers' => array(
'Authorization' => 'Bearer ' . MYSITE_LINE_CHANNEL_TOKEN,
'Content-Type' => 'application/json',
'X-Line-Retry-Key' => wp_generate_uuid4(), // 再送時の二重送信を防ぐキー
),
'body' => wp_json_encode( array(
'to' => MYSITE_LINE_ADMIN_USER_ID,
'messages' => array(
array( 'type' => 'text', 'text' => $text ),
),
) ),
) );
$code = wp_remote_retrieve_response_code( $response );
if ( is_wp_error( $response ) || 200 !== $code ) {
// 失敗はコメントのメタに記録(本文やトークンはログに残さない)
update_comment_meta( $comment_id, '_mysite_line_notify', 'failed:' . ( is_wp_error( $response ) ? $response->get_error_code() : $code ) );
return;
}
update_comment_meta( $comment_id, '_mysite_line_notify', 'sent' );
} );
ここで気をつけている点を説明します。
まず、通知に載せる情報を絞っています。コメント投稿者のメールアドレスや IP アドレスは載せず、本文も wp_html_excerpt() で80文字程度に切り詰めています。LINE に送った内容は LINE のサーバーとスマートフォンに残るため、全文が必要なら管理画面のリンクから確認する形にします。コメント投稿者の情報を外部サービスに送る点は、プライバシーポリシーにも記載しておくと丁寧です。
次に、管理画面へのリンクは admin_url() で組み立てています。get_edit_comment_link() は現在のユーザーの権限を確認する関数で、WP-Cron の処理のようにログインユーザーがいない状況ではリンクを返さないことがあるためです。リンクを開いた後はふつうに WordPress のログインと権限確認が行われます。
X-Line-Retry-Key は、通信エラーで再送したときに同じメッセージが二重に届くのを防ぐためのヘッダーです。この例では1回しか送っていませんが、再送処理を足すときは、同じコメントに対して同じキーを使い回すようにします。
動かないときの確認順
通知が届かないときは、可能性の高い順に次を確認します。
- イベントが実行されているか:WP Crontrol のようなプラグインや WP-CLI の
wp cron event listで、mysite_line_notify_commentが溜まったままになっていないかを見ます。溜まっているなら WP-Cron 自体が動いていません。サーバーの cron 設定や、wp-config.php でDISABLE_WP_CRONが有効になっていないかを確認します。 - コメントのメタに失敗が記録されていないか:
failed:401ならトークンの誤りか失効、failed:400なら宛先のユーザーIDやメッセージの形式の誤りが主な原因です。 - 友だち追加されているか:エラーが出ていないのに届かない場合、通知先のアカウントで公式アカウントがブロックされている、または友だち追加されていない可能性があります。
- 送信数の上限に達していないか:
failed:429は短時間に送りすぎたか、月間の上限に達したことを示します。公式アカウントの管理画面で今月の送信数を確認します。
運用の工夫
コメントが多いサイトでは、1件ごとの通知ではなく、1時間に1回「承認待ちが何件あるか」をまとめて送る方法も検討してください。wp_schedule_event() で定期イベントを登録し、get_comments( array( 'status' => 'hold', 'count' => true ) ) で件数を数えて送れば、送信数を大きく減らせます。通知の要否を管理画面から切り替えたくなったら、設定画面を作る際に nonce と manage_options の権限チェックを入れてください。
まとめ
- LINE Notify は 2025年3月末で終了したため、コメント通知は LINE Messaging API のプッシュメッセージで実装する。
- 公式アカウントで Messaging API を有効にし、チャネルアクセストークンと自分のユーザーIDを取得して、通知を受ける端末で友だち追加しておく。
comment_postではスパムを除外して WP-Cron に積むだけにし、送信は別の処理で行う。- 通知内容は記事名・短い抜粋・管理画面へのリンクにとどめ、メールアドレスやトークンを LINE やログに残さない。
- 送信数には上限があるので、件数が多いサイトはまとめ通知に切り替える。