Contact Form 7 エラーメッセージの変更

# はじめに
WordPressのお問い合わせフォームでよく使用されるプラグインのContact Form 7。

入力必須の項目に何も記入しなかった場合、エラーメッセージが表示される仕様になっています。

今回、そのエラーメッセージをデフォルトではなく、個別に指定したエラーメッセージを表示するようにカスタマイズしたので、その実装の過程で試したことや最終的にどういう風に実装したのか、記録として残そうと思います。

# 実装したいこと
### デフォルトのエラーメッセージ
まず、Contact Form 7を適用した状態で、入力必須項目に何も記入しなかった場合の通常のエラーメッセージは下記の画像のように「入力してください。」が表示されます。
こちらのエラーメッセージを「お名前」、「メールアドレス」、「ご相談内容」の項目毎に文章を変更しようと思います。

![デフォルト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/749f8523-0689-c3a6-d2aa-74a845ea228f.png)

# 試したこと
### 1.WordPressの管理画面上で設定
最初に目的の実装をするために試したこととして、WordPressの管理画面において、Contact Form 7の設定を変更できる箇所からエラーメッセージを変更しました。(赤枠のメッセージを変更しました。)

![設定画面 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/4c8fce08-96c9-1f9e-9a33-60958d24c24a.png)

**結果：全ての項目が「お名前を入力してください。」に変更された。**
こちらの方法でも、「入力してください」というエラーメッセージの変更自体は、可能でしたが、全ての項目が変わってしまうため、それぞれの項目のエラーメッセージを個別に変更することはできませんでした。
![設定後の画面 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/333dbb84-5443-8d9e-3552-0e6519e43d7a.png)

参考サイト

https://contactform7.com/ja/customizing-validation-error-messages/

### 2.functions.phpで設定
WordPressのfunctions.phpファイルに下記のコードを追加することで、エラーメッセージをカスタマイズする方法を試してみました。

```php:functions.php
function custom_wpcf7_validation_error_message($result, $tag)
{
    // 
    if ('your_name' == $tag->name) {
        if (empty($_POST[$tag->name])) {
            $result->invalidate($tag, 'お名前を入力してください。');
        }
    }
        return $result;
}
add_filter('wpcf7_validate_text', 'custom_wpcf7_validation_error_message', 10, 2);
```
　　
下記の画像のWordPressの管理画面側のコンタクトフォームで記載した「your_name」と一致した場合、「お名前を入力してください」というエラーメッセージを表示するコードになります。

![994df5940d7c3387471b35a3ad2ba1a8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/033a8058-dab0-b032-1703-004ef0a77556.png)

**結果：デフォルトの「入力してください。」が表示された。**
![f32ac09b43ed08b1746a5075e86caa63.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/b8cff836-6772-1174-486d-12f1aa65f2de.png)
　　
参考サイト

https://web-html.blog/wordpress/contact-form7-2/

### 3.必須項目の設定を無効化
色々な方法を試しましたが、デフォルトのエラーメッセージしか表示されませんでした。
そこで、WordPressの管理画面側のコンタクトフォーム上の必須項目の設定を無効化した状態で、上記で試したfunctions.phpのコードを追加して検証しました。
　　
下記の「*」を削除することで必須項目を無効化できる
![9479ea3c520f55a04da20b924af896f2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/6e7cd86b-c9c2-c032-63ef-1ca175431863.png)

下記のコードをfunctions.phpに追加する。

```php:functions.php
function custom_wpcf7_validation_error_message($result, $tag)
{
    // 
    if ('your_name' == $tag->name) {
        if (empty($_POST[$tag->name])) {
            $result->invalidate($tag, 'お名前を入力してください。');
        }
    }
        return $result;
}
add_filter('wpcf7_validate_text', 'custom_wpcf7_validation_error_message', 10, 2);
```
**結果：エラーメッセージが「お名前を入力してください。」に変更された。**
![0565588dcad532f1b712f4f69907c741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/872869d8-1e6b-713c-9d1c-94203b6ca204.png)
　　
「メールアドレス」、「ご相談内容」の項目も同様にfunctions.phpに追加しました。
```php:functions.php
function custom_wpcf7_validation_error_email($result, $tag)
{
    if ('your_email' == $tag->name) {
        if (empty($_POST[$tag->name])) {
            $result->invalidate($tag, 'メールアドレスを入力してください。');
        }
    }
        return $result;
}
add_filter('wpcf7_validate_email', 'custom_wpcf7_validation_error_email', 10, 2);

function custom_wpcf7_validation_error_textarea($result, $tag)
{
    if ('content' == $tag->name) {
        if (empty($_POST[$tag->name])) {
            $result->invalidate($tag, 'ご相談内容を入力してください。');
        }
    }
        return $result;
}
add_filter('wpcf7_validate_textarea', 'custom_wpcf7_validation_error_textarea', 10, 2);
```

**WordPressの管理画面側のコンタクトフォーム**
(赤枠の変数が一致した場合、それぞれのエラーメッセージを表示する。)
![0f3086137994b158e89f62a78f5f92e9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/816617f2-08e4-6b94-821c-2917243ed632.png)

**実際の表示画面**
![51b41987ef7ac7e8d5e0602e0e83744c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/4ab9999f-be41-8a72-953c-7935ced33f17.png)
![c1c9af911fb0f6901fe65164971d2935.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691587/312b644e-b71f-4dae-ba25-ec6e9d487231.png)

## まとめ
・WordPressの管理画面側のコンタクトフォームで必須項目に設定した場合、無条件でデフォルトのエラーメッセージ「入力してください。」が表示される。
・必須項目の設定を無効化した状態でfunctions.phpにコードを追加することでエラーメッセージをカスタマイズができる。

　　
**追加するコード**
```php:functions.php
function custom_wpcf7_validation_error_message($result, $tag)
{
    if ('your_name' == $tag->name) {
        if (empty($_POST[$tag->name])) {
            $result->invalidate($tag, 'お名前を入力してください。');
        }
    }
        return $result;
}
add_filter('wpcf7_validate_text', 'custom_wpcf7_validation_error_message', 10, 2);

function custom_wpcf7_validation_error_email($result, $tag)
{
    if ('your_email' == $tag->name) {
        if (empty($_POST[$tag->name])) {
            $result->invalidate($tag, 'メールアドレスを入力してください。');
        }
    }
        return $result;
}
add_filter('wpcf7_validate_email', 'custom_wpcf7_validation_error_email', 10, 2);

function custom_wpcf7_validation_error_textarea($result, $tag)
{
    if ('content' == $tag->name) {
        if (empty($_POST[$tag->name])) {
            $result->invalidate($tag, 'ご相談内容を入力してください。');
        }
    }
        return $result;
}
add_filter('wpcf7_validate_textarea', 'custom_wpcf7_validation_error_textarea', 10, 2);

```