概要
get_attached_fileフィルタは、WordPress内で添付ファイルのパス名を取得するために使用されるフックです。このフィルタは、添付ファイルがアップロードされた際や、添付ファイルに関連するデータを取得する際に役立ちます。以下のような機能を実装する際によく使われます:
- 特定のファイルパスを変更する
- 添付ファイルのをカスタムメタデータと結びつける
- ファイルの存在チェックのルールを変更する
- 画像や動画ファイルの出力をカスタマイズする
- 特定の条件に基づいて異なるファイルパスを返す
- サーバーのパスをローカルな環境で変更する
- 考慮すべきリダイレクトルールの設定
- 添付ファイルの出力をトラッキングする
構文
apply_filters( 'get_attached_file', $file, $attachment_id );
パラメータ
$file(string): 添付ファイルの現在のパス。$attachment_id(int): 添付ファイルのID。
戻り値
- 添付ファイルの新しいパス(string)。
関連する関数
使用可能なバージョン
このフィルタはWordPress 2.5以降で使用可能です。
コアファイルのパス
wp-includes/post.php
この関数のアクションでの使用可能性
| アクション | 使用例 |
|---|---|
| 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: パスをカスタマイズする
add_filter('get_attached_file', 'custom_attached_file_path', 10, 2);
function custom_attached_file_path($file, $attachment_id) {
// ファイルの拡張子をチェックして、条件に応じて新しいパスを返す
if (strpos($file, '.png') !== false) {
return str_replace('/uploads/', '/custom-uploads/', $file);
}
return $file;
}
このサンプルコードは、.pngファイルがアップロードされたときに、そのファイルのパスをカスタムパスに変更します。
引用元: https://developer.wordpress.org/reference/hooks/get_attached_file/
サンプルコード2: フィルタを使用したログの作成
add_filter('get_attached_file', 'log_attached_file_path', 10, 2);
function log_attached_file_path($file, $attachment_id) {
error_log('添付ファイルパス: ' . $file);
return $file;
}
このコードは、添付ファイルのパス名をエラーログに記録します。
引用元: https://developer.wordpress.org/reference/hooks/get_attached_file/
サンプルコード3: 注釈を付加する
add_filter('get_attached_file', 'add_custom_annotation', 10, 2);
function add_custom_annotation($file, $attachment_id) {
// 添付ファイルに特定の注釈を追加
return $file . '?annotations=custom_annotation';
}
このサンプルでは、取得したファイルパスにクエリパラメータを追加しています。
引用元: https://developer.wordpress.org/reference/hooks/get_attached_file/
サンプルコード4: 特定のファイルタイプの制御
add_filter('get_attached_file', 'control_file_type', 10, 2);
function control_file_type($file, $attachment_id) {
// MP3ファイルのみ変更
if (strpos($file, '.mp3') !== false) {
return '/new-path/' . basename($file);
}
return $file;
}
このコードは、MP3ファイルのパスのみを新しいパスに変更します。
引用元: https://developer.wordpress.org/reference/hooks/get_attached_file/
サンプルコード5: 条件に基づくパスの返却
add_filter('get_attached_file', 'conditional_file_path', 10, 2);
function conditional_file_path($file, $attachment_id) {
$custom_condition = get_post_meta($attachment_id, 'custom_condition', true);
if ($custom_condition) {
return '/alternate-path/' . basename($file);
}
return $file;
}
このコードでは、カスタム条件に基づいて異なるファイルパスを返します。
引用元: https://developer.wordpress.org/reference/hooks/get_attached_file/