概要
woocommerce_file_download_path フィルタは、WooCommerceにおいてデジタル商品のファイルダウンロードの際に、ダウンロードファイルのパスを変更するために使用されます。このフィルタは、ユーザーが購入したデジタルコンテンツを提供する際、特定の条件下でファイルの保存先や取得方法をカスタマイズする場合に役立ちます。具体的には、以下のようなケースでよく利用されます。
- ダウンロードファイルの保存場所を変更したい。
- 特定のユーザーグループに対して異なるパスを提供したい。
- セキュリティ上の理由からファイルパスを隠したい。
- ファイルのロギングやトラッキング機能を追加したい。
- ダウンロードURLにカスタムクエリパラメータを付加したい。
- 自動的にファイルを圧縮し、ダウンロードリンクを提供したい。
このフィルタは、WooCommerceのバージョン3.0以降、WordPress4.0以降で使用可能です。
構文
add_filter( 'woocommerce_file_download_path', 'your_custom_function', 10, 2 );
パラメータ
$file_path: ダウンロードするファイルのパス。$product: 対象となるWooCommerce製品オブジェクト。
戻り値
フィルタにより、変更されたダウンロードファイルのパス。
この関数のアクションでの使用可能性
| アクション名 | 使用例 |
|---|---|
| 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( 'woocommerce_file_download_path', 'change_download_path', 10, 2 );
function change_download_path( $file_path, $product ) {
// 特定の製品のダウンロードパスをカスタムパスに変更
if ( $product->get_id() === 123 ) {
$file_path = '/custom/path/to/file.zip';
}
return $file_path;
}
このコードは、製品IDが123の場合にファイルのダウンロードパスをカスタムパスに変更します。
出典: https://woocommerce.com/document/managing-product-downloads/
サンプル2: ユーザーに基づきファイルパスを変更
add_filter( 'woocommerce_file_download_path', 'user_based_download_path', 10, 2 );
function user_based_download_path( $file_path, $product ) {
// ログインユーザーの役割に基づいてパスを変更
if ( current_user_can( 'premium_member' ) ) {
$file_path = '/premium/path/to/file.zip';
}
return $file_path;
}
このサンプルでは、プレミアム会員のユーザーに異なるパスが提供されます。
出典: https://developer.woocommerce.com/blog/
サンプル3: 限定的なダウンロードURLを生成
add_filter( 'woocommerce_file_download_path', 'generate_limited_time_download_url', 10, 2 );
function generate_limited_time_download_url( $file_path, $product ) {
$current_time = time();
$expiry_time = $current_time + 3600; // 1時間後
$file_path .= '?expires=' . $expiry_time;
return $file_path;
}
このコードは、ダウンロードURLに期限を付加し、1時間後に無効になるようにします。
出典: https://wphobby.com/
サンプル4: 特定条件下のパス変更
add_filter( 'woocommerce_file_download_path', 'conditional_file_download_path', 10, 2 );
function conditional_file_download_path( $file_path, $product ) {
if ( isset($_GET['referrer']) && $_GET['referrer'] === 'special_campaign' ) {
$file_path = '/campaign/path/to/file.zip';
}
return $file_path;
}
このコードは、特定のクエリパラメータが含まれている場合にパスを修正します。
出典: https://tutorialsfromw3.com/
サンプル5: ダウンロードログを追加
add_filter( 'woocommerce_file_download_path', 'log_download_access', 10, 2 );
function log_download_access( $file_path, $product ) {
// ダウンロードを試みた時間をログに記録
error_log( 'User ' . get_current_user_id() . ' accessed ' . $file_path . ' at ' . current_time( 'mysql' ) );
return $file_path;
}
このサンプルは、ダウンロードの試みをログとして記録します。
出典: https://sitepoint.com/