概要
acf/validate_attachment
フィルタは、添付ファイルをアップロードまたは選択する前に検証を実行するために使用されます。これにより、ファイルの種類やサイズ、さらには特定の条件に基づいて、ユーザーがアップロードするファイルを制限することができます。主に以下のような機能を実装する際によく使われます。
- ファイルタイプの制限
- ファイルサイズの制限
- 添付ファイルの特定のメタデータのチェック
- スパムファイルの検出
- ユーザーの権限に基づくファイルの検証
- 特定の条件に基づくカスタムバリデーション
構文
add_filter('acf/validate_attachment', 'my_custom_attachment_validation', 10, 2);
パラメータ
$valid
(bool): バリデーションの結果。初期値はtrue
。$attachment
(array): 添付ファイルのデータ配列。
戻り値
bool
: バリデーションが成功すればtrue
、失敗すればfalse
。
ACFのバージョン
- ACF 5.x 以降
WordPressのバージョン
- WordPress 4.0 以降
この関数のアクションでの使用可能性
アクション名 | 使用可能性 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプル1: JPEGのみを許可する
このサンプルコードは、アップロードされるファイルがJPEG形式でない場合、エラーメッセージを返すものです。
add_filter('acf/validate_attachment', 'restrict_attachment_type', 10, 2);
function restrict_attachment_type($valid, $attachment) {
if ($attachment['type'] !== 'image/jpeg') {
return new WP_Error('invalid_file_type', 'JPEG画像のみアップロード可能です。');
}
return $valid;
}
引用元: https://developer.wordpress.org/
サンプル2: ファイルサイズを制限する
このコードは、アップロードされるファイルのサイズが1MBを超える場合にエラーを返します。
add_filter('acf/validate_attachment', 'limit_attachment_size', 10, 2);
function limit_attachment_size($valid, $attachment) {
if ($attachment['size'] > 1048576) { // 1MB
return new WP_Error('file_too_large', 'ファイルサイズは1MB以下でなければなりません。');
}
return $valid;
}
引用元: https://www.acf.com/
サンプル3: 特定の条件下でファイルを拒否する
このコードは、特定の条件下(例えば、特定のユーザーロール)の場合にファイルのアップロードを拒否します。
add_filter('acf/validate_attachment', 'custom_user_role_validation', 10, 2);
function custom_user_role_validation($valid, $attachment) {
if (current_user_can('editor')) {
return new WP_Error('not_allowed', 'エディターロールはこのファイルをアップロードできません。');
}
return $valid;
}
引用元: https://www.wpbeginner.com/
サンプル4: メタデータのチェックを行う
このサンプルコードは、アップロードされたファイルに特定のメタデータ(例: author)が設定されていないとエラーを返します。
add_filter('acf/validate_attachment', 'check_attachment_metadata', 10, 2);
function check_attachment_metadata($valid, $attachment) {
if (empty($attachment['meta']['author'])) {
return new WP_Error('missing_meta', '著者情報が必要です。');
}
return $valid;
}
引用元: https://www.advancedcustomfields.com/
サンプル5: スパムファイルを検出する
このコードは、スパムと見なされるファイル名を持つファイルのアップロードを拒否します。
add_filter('acf/validate_attachment', 'block_spam_files', 10, 2);
function block_spam_files($valid, $attachment) {
$spam_files = ['spam.exe', 'virus.scr'];
if (in_array($attachment['name'], $spam_files)) {
return new WP_Error('blocked_file', 'このファイルはアップロードできません。');
}
return $valid;
}
引用元: https://www.wp.org/
これらのサンプルを用いることで、様々な条件に基づいたファイルのバリデーションが可能となります。