概要
woocommerce_available_downloadsフィルタは、WooCommerceでダウンロード可能な商品の一覧を取得したり、変更したりする際に使用されます。このフィルタは特にデジタル商品を扱う際に非常に便利です。たとえば、特定の条件でダウンロードリンクを変更したり、特定のユーザーに対してしか表示しないようにしたりといったカスタマイズが可能です。以下に、一般的な利用ケースを示します。
- ユーザーの権限に基づいてダウンロード可能なファイルを制御する。
- 特定の条件を満たす場合にのみダウンロードリンクを表示する。
- ダウンロードリンクの表示テキストをカスタマイズする。
- 商品の再ダウンロード制限を設定する。
- カスタムメタデータに基づいてダウンロード可能なファイルをフィルタリングする。
- 特定のカテゴリに属する商品のダウンロードファイルを制御する。
構文
add_filter( 'woocommerce_available_downloads', 'custom_function_name', 10, 1 );
パラメータ
$downloads: ダウンロード可能なファイルの配列。ファイル情報が含まれています。
戻り値
- フィルタリング後のダウンロード可能なファイルの配列。
利用可能なバージョン
- WooCommerce バージョン: 3.0以降
- 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: 特定のユーザーが所有するダウンロードを表示する
add_filter( 'woocommerce_available_downloads', 'filter_downloads_by_user', 10, 1 );
function filter_downloads_by_user( $downloads ) {
$current_user = wp_get_current_user();
$user_downloads = array();
foreach ( $downloads as $download ) {
if ( $download['user_id'] === $current_user->ID ) {
$user_downloads[] = $download;
}
}
return $user_downloads;
}
このサンプルは、現在のユーザーが所有するダウンロードだけを表示するものです。
サンプル2: ダウンロードリンクのテキストをカスタマイズする
add_filter( 'woocommerce_available_downloads', 'custom_download_link_text', 10, 1 );
function custom_download_link_text( $downloads ) {
foreach ( $downloads as &$download ) {
$download['name'] = '特別なダウンロード - ' . $download['name'];
}
return $downloads;
}
このサンプルは、ダウンロードリンクのテキストに接頭辞を追加します。
サンプル3: 特定の商品のダウンロードをフィルタリングする
add_filter( 'woocommerce_available_downloads', 'filter_downloads_by_product', 10, 1 );
function filter_downloads_by_product( $downloads ) {
if ( ! is_product() ) {
return $downloads;
}
global $product;
if ( $product->get_id() !== 123 ) { // 商品ID 123 の場合
return [];
}
return $downloads;
}
このサンプルは、特定の商品でのみダウンロードを表示します。
サンプル4: ダウンロードファイルのアクセスを制限する
add_filter( 'woocommerce_available_downloads', 'restrict_file_access', 10, 1 );
function restrict_file_access( $downloads ) {
foreach ( $downloads as $key => $download ) {
if ( ! current_user_can( 'download_file', $download['id'] ) ) {
unset( $downloads[$key] );
}
}
return $downloads;
}
このサンプルは、ユーザーが特定のダウンロードファイルにアクセスできない場合、そのファイルをリストから除外します。
サンプル5: ダウンロード可能なファイルの順序を変更する
add_filter( 'woocommerce_available_downloads', 'sort_downloads_by_name', 10, 1 );
function sort_downloads_by_name( $downloads ) {
usort( $downloads, function( $a, $b ) {
return strcmp( $a['name'], $b['name'] );
});
return $downloads;
}
このサンプルは、ダウンロードファイルを名前順にソートします。