勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

WordPressで事前に指定した禁止ワードが入力されている場合は記事を保存・公開できないようにする方法

  WordPress CMS

WordPressで事前に指定した禁止ワードが入力されている場合に記事を保存・公開しようとすると、禁止ワードが含まれている旨のアラートを表示し、保存・公開できないようにしたい。また、ブロックエディタではなくClassic Editorプラグインを使用している環境に実装したい。以下に対応方法をメモ。

 

対応方法

functions.php

以下をfunctions.phpに追記する。禁止ワード部分($ng_words)は適宜変更する。

// 記事作成・編集の際、本文にNGワードが無いかチェック
function ng_words_validate( $hook ){

    // 記事作成・編集ページじゃない場合は終了
    if( $hook !== 'post.php' && $hook !== 'post-new.php' ){
        return;
    }

    // 禁止ワードを配列で指定
    $ng_words = array('禁止ワード', 'NGワード', '不適切ワード');

    // インラインJSを注入する
    $script = "
        jQuery(document).ready(function($) {
            console.log('start ng word check');

            const ngWords = " . json_encode($ng_words) . ";

            // フォーム送信時
            $('#post').on('submit', function(e){

                //入力内容の取得
                let content = '';

                // WYSIWYG使用時(ビジュアルタブ時)
                if( typeof tinyMCE !== 'undefined' && tinyMCE.get('content') && !tinyMCE.get('content').isHidden() ){
                    content = tinyMCE.get('content').getContent();

                // テキストエディタ使用時(コードタブ時)
                }else{
                    content = $('#content').val() || '';
                }

                // 禁止ワードのチェック
                for( let i = 0; i < ngWords.length; i++ ){
                    if( content.indexOf(ngWords[i]) !== -1 ){
                        alert('本文に禁止ワード「' + ngWords[i] + '」が含まれています。');

                        // フォームの送信を停止
                        e.preventDefault();
                        return false;
                    }
                }
            });
        });
    ";

    wp_add_inline_script('jquery-core', $script);
}
//ダッシュボードにJSファイルを読み込むためのフック
add_action('admin_enqueue_scripts', 'ng_words_validate');

 

リファレンス

admin_enqueue_scripts

https://developer.wordpress.org/reference/hooks/admin_enqueue_scripts/

wp_add_inline_script

https://developer.wordpress.org/reference/functions/wp_add_inline_script/

 - WordPress CMS

  関連記事

WordPressの記事公開・更新時に何らかの処理を行う方法
WordPressの記事公開・更新時に何らかの処理を行う方法

WordPressで記事を公開(予約公開含む)もしくは更新した際に何らかの処理を ...

wp_mail関数でエンベロープFrom(Return-Path)が指定できない場合の対応方法
wp_mail関数でエンベロープFrom(Return-Path)が指定できない場合の対応方法

WordPress内に設置されたお問い合わせのフォームようなシステムでエンベロー ...

WordPressでコンテンツ(記事)内に広告を差し込む方法
WordPressでコンテンツ(記事)内に広告を差し込む方法

WordPress内でヘッダーやフッターではなく、コンテンツ内にバナー広告を差し ...

WordPressでテーマファイル内で共通の変数を設定及び使用する方法
WordPressでテーマファイル内で共通の変数を設定及び使用する方法

WordPressでテーマ内の共通変数を設定し使用したかった。例えば記事一覧ペー ...

WordPressで記事毎に設定したバナー広告を表示させる方法
WordPressで記事毎に設定したバナー広告を表示させる方法

WordPressでGoogleアドセンスのようなクリック広告ではなく、商品を指 ...