Amazonで商品を見る セール会場へ

WordPress│承認待ちコメントを確認してスパムを整理する方法

承認待ちコメントを整理する場合は、内容を確認し、WordPress標準のコメント画面から選択した項目だけを処理します。ひらがなの有無や英字の割合だけではスパムと判定できません。英語の質問、漢字だけの短文、コードを含むコメントも正当な投稿になりえます。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

標準画面で対象を選んで処理する

管理画面の「コメント」で承認待ちに絞り込み、本文とリンク先の文脈を確認します。確認したコメントだけにチェックを付け、一括操作からスパム扱いまたはゴミ箱への移動を選びます。先頭の数件だけ見て未確認の全件を処理しないでください。

スパムやゴミ箱の一覧も確認し、誤分類があれば通常のコメントへ戻します。完全削除後や自動削除後は画面から戻せません。ゴミ箱無効の設定では操作が完全削除になる場合もあるので、ボタンの表示を確認してください。バックアップはコメントとコメントメタを含むデータベースで保存します。

読み取り専用の確認ツール

追加の一覧が必要な場合に使うコードです。50件ずつ全文を表示し、標準の編集画面へ移動できます。削除SQL、POST処理、自動判定は含みません。子テーマのfunctions.phpへ追加します。既にPHP開始タグがある位置では先頭の <?php を重ねないでください。Code SnippetsではPHPスニペットとして先頭タグを省いて登録します。

<?php
add_action( 'admin_menu', function () {
    add_management_page( '承認待ち確認', '承認待ち確認', 'manage_options', 'waza-pending-review', 'waza_pending_review_page' );
} );
function waza_pending_review_page() {
    if ( ! current_user_can( 'manage_options' ) ) { wp_die( '権限がありません。' ); }
    $page = max( 1, isset($_GET['review_page']) ? absint($_GET['review_page']) : 1 );
    $total = (int) get_comments( array( 'status' => 'hold', 'count' => true ) );
    $pages = max( 1, (int) ceil($total / 50) );
    $page = min( $page, $pages );
    $comments = get_comments( array( 'status' => 'hold', 'number' => 50, 'offset' => ($page - 1) * 50, 'orderby' => 'comment_ID', 'order' => 'ASC' ) );
    echo '<div class="wrap"><h1>承認待ちコメントの確認</h1><p>読み取り専用です。言語や文字種による自動判定・削除は行いません。</p>';
    echo '<p>承認待ち ' . esc_html((string)$total) . ' 件 / ' . esc_html((string)$page) . ' ページ</p>';
    foreach ( $comments as $comment ) {
        echo '<section><h2>ID ' . esc_html((string)$comment->comment_ID) . ' — ' . esc_html($comment->comment_author) . '</h2>';
        echo '<div style="white-space:pre-wrap;overflow-wrap:anywhere">' . esc_html($comment->comment_content) . '</div>';
        $url = add_query_arg( array('action'=>'editcomment', 'c'=>(int)$comment->comment_ID), admin_url('comment.php') );
        echo '<p><a href="' . esc_url($url) . '">標準のコメント編集画面で確認</a></p></section>';
    }
    if ( ! $comments ) echo '<p>承認待ちコメントはありません。</p>';
    foreach ( array('前へ' => $page - 1, '次へ' => $page + 1) as $label => $number ) {
        if ( $number < 1 || $number > $pages ) continue;
        $url = add_query_arg( array('page'=>'waza-pending-review','review_page'=>$number), admin_url('tools.php') );
        echo '<a href="' . esc_url($url) . '">' . esc_html($label) . '</a> ';
    }
    echo '</div>';
}

管理者で「ツール → 承認待ち確認」を開きます。この一覧は承認待ち全件を対象にしたページ表示であり、スパム候補の自動選別ではありません。確認中に他の担当者が変更するとページの件数や並びが変わるので、処理時には標準画面で状態を再確認します。

検証と戻し方

導入後は権限のない利用者に画面が開かれないこと、コメント内のHTMLが実行されず文字として表示されること、0件・複数ページの表示を確認します。PC・スマホで長文が折り返し、Tab・Enterで編集リンクへ移れることも確認します。ツールを外す場合は追加したスニペットを停止するか、functions.phpを変更前へ戻します。このコード自体はコメントを変更しません。

API仕様:get_comments、ゴミ箱への移動と設定の関係。

50件を超える承認待ちコメントを確認する

確認ツールはIDの昇順で50件ずつ表示します。

1ページ目の確認が済んだら末尾の「次のページ」へ進みます。

51件ある隔離環境で1ページ目50件・2ページ目1件を、検証投稿を1件追加した後に50件・2件を確認しました。

ページ番号が大きすぎる場合は最後のページに合わせます。

表示された本文にscriptタグなどの文字列があってもHTMLとして実行しないようエスケープします。

実HTTPの管理画面でも、検証用タグは文字として表示されました。

標準の編集画面へのリンクで内容を確認し、処理対象は標準コメント画面で選んでください。

この確認ツール自体は承認・スパム化・削除を行いません。

  • URLをコピーしました!

制作・運用のご依頼はこちら

MOTOKI合同会社のサービス

WordPressの制作・カスタマイズ・高速化・SEO対策・保守まで、Webサイトに関する業務を一括で承ります。料金はサービスごとに公開しています。

WAZAの有料記事のサブスクリプションも開始しました。

目次