株式会社イロコト株式会社イロコト

Blogイロコトのブログ

  1. Home
  2. Blog
  3. WordPressで誤った記事を公開させない対策 - Advanced Custom Fields(ACF)

WordPressで誤った記事を公開させない対策 - Advanced Custom Fields(ACF)

2022.07.07
  • コーディング

こんにちは、ばやしです。

 

やっと気温が上がってきたかと思えば急に35℃の猛暑日になったりと、お天道様に振り回されて体調を崩しがちかと思いますが、いかがお過ごしでしょうか。

 

暑さで頭がぼんやりするというのはままある事だと思いますが、Webの運用分野、例えばWordpressなどでの更新作業を行っている時の集中力の低下は大敵です。

 

間違って検証サイトのURLを貼り付けてしまい、そのまま気付かずに全世界に公開などしてしまったら・・・そういったトラブルをある程度解消できる方法を今回ご紹介します。

 

※この記事はWordpressのClassic Editorを使用する場合を想定して書いています。ブロックエディター(Gutenberg)を使用する場合は方法が異なる場合がありますのでご注意ください。

 

※この記事はACFを使用したカスタムフィールドのバリデーションについて書いています。Wordpressデフォルトのエディターなどとはまた別となりますので、ご注意ください。

 

1.経緯

サイトの実装をしつつ公開/更新作業も行っていると、稀に検証環境と本番環境が混同してしまう事がありました。

●例
本番環境 https://hogehoge.com/news/2022/0101/1/
検証環境 https://dev.hogehoge.com/news/2022/0101/1/

この程度普通に見ていれば気が付きそうと思いますが、人間の認知能力は杜撰なもので、意外と見落とすこともあります。

 

それなりに需要がありそうに思うのですが、デフォルトのUI上からは「入力内容に○○○が含まれていたらダメ」のような設定が出来なかったため、下記方法で対応しました。

 

2.実装方法

基本実装

使用しているテーマのfunctions.phpに下記のコードを記載します。

function my_acf_validate_value( $valid, $value, $field, $input_name ) {
  if( $valid !== true ) {
    return $valid;
  }

  // 以下にバリデーション条件などの設定
  if( is_string($value) && strpos($value, 'irokoto') !== false ) {
    return __( '不適切な文字列"irokoto"が含まれています。削除を行ってください。' );
  }
  return $valid;
}

// 全てのACFフィールドに適用
add_filter('acf/validate_value', 'my_acf_validate_value', 10, 4);

strpos()を使った判定の他にも、preg_match()でより複雑な条件指定を行ったりなど応用も効きます。

 

逆に必要な文言が入っていない際にエラーを出したいという場合は、if文内の !== === に変更することで可能です。

 

バリデーション対象フィールドの指定方法

上記の方法では全てのACFフィールドに対してバリデーションが適用されますが、フィールドタイプ、フィールド名、キーで特定のフィールドを指定して適用することも可能です。

 

フィールドタイプ

add_filter('acf/validate_value/type=text', 'my_acf_validate_value', 10, 4);

 

フィールド名

add_filter('acf/validate_value/name=acf_test', 'my_acf_validate_value', 10, 4);

フィールドラベルではなく、フィールド名です。

 

フィールドキー

add_filter('acf/validate_value/key=field_12345678', 'my_acf_validate_value', 10, 4);

 

例:特定のドメイン以外のURLを禁止する


function my_acf_validate_url( $valid, $value, $field, $input_name ) {
  if( $valid !== true ) {
    return $valid;
  }

  if( is_string($value) && strpos($value, 'google.com') === false ) {
    return __( 'ドメイン名が不適切です。' );
  }
  return $valid;
}
// 名前が「acf_url」のフィールドを対象
add_filter('acf/validate_value/name=acf_url', 'my_acf_validate_url', 10, 4);

出典 - ACF | acf/validate_value

 

3.実際の挙動

この方法でバリデーションを追加した際の実際の挙動は以下のようになります。

例えば、手が滑ってこのように弊社サイトのURLをリンクに設定してしまった場合、

 

公開/更新を押してもこのようにエラーが出力され実行されません。

 

 

4.公開時に確認アラートを出してくれるプラグイン

ここまで書いてきた内容は、フィールドに誤った入力をした際にエラーを出す方法ですが、そもそも公開自体を誤って行ってしまう場合もあると思います。

 

こちらがClassic Editorの公開パネルですが、下書き保存をしたいのに間違って公開の方を押してしまいそうになることが稀にあります。

本番環境で作業していると肝が冷える瞬間です。

 

普段は公開予定の日時に予め予約投稿設定を行った上で作業するなどで対応していますが、記事公開/更新の際に確認メッセージを表示するプラグインがありましたので紹介させていただきます。

 

Publish Confirm Message」というプラグインです。

直球な名前ですが機能も直球で、公開または更新操作を行う際にアラートを表示してくれます。

更新は継続されているようですがインストール数が少ないため、インストール出来るプラグインに制限がある案件では使えない可能性があります。

 

また、毎回アラートが出るので若干の煩わしさはありますが公開してはいけないタイミングで公開してしまうよりはよいでしょう。

 

デフォルトでは英語メッセージですが、文言は変更可能ですので問題ありません。

是非試してみてください。

 

5.あとがき

人間が作業する以上、ミスは完全には無くせないものではありますが、今回紹介したような手法を使って極力抑えることは可能だと思います。

 

弊社では公開タイミングが重要なゲームやアニメなどのエンタメ案件を多く担当させていただいていますので、引き続き情報収集を行いよりよい方法を検討していきます。

 

それでは、良いWordpressライフを。

 

Contact

案件のご相談や、弊社についてのご質問など、
お気軽にご連絡くださいませ。

お問い合わせ
ページトップ