勉強したことのメモ

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

  関連記事

Contact form7で送信数を測定(トラッキングタグ)
Contact form7で送信数を測定(トラッキングタグ)

contact form7でフォーム送信が完了した時点で計測されるようにトラッキ ...

WordPressのユーザー画像とプロフィールの登録及び表示方法
WordPressのユーザー画像とプロフィールの登録及び表示方法

WordPressでユーザー毎に画像とプロフィール部分にHTMLタグを登録したか ...

Contact form7でフォーム送信時に別サーバへもデータを送信する方法
Contact form7でフォーム送信時に別サーバへもデータを送信する方法

contact form7でフォーム送信時に別サーバーでフォーム内容をPOST送 ...

Advanced Custom Fieldsで設定した項目を条件に記事一覧を取得する方法
Advanced Custom Fieldsで設定した項目を条件に記事一覧を取得する方法

WordPressでAdvanced Custom Fieldsにて設定した項目 ...

WordPressでタグやカテゴリの複数検索
WordPressでタグやカテゴリの複数検索

WordPressでカテゴリのアンド検索や、タグとカテゴリの同時検索を行いたかっ ...