概要
woocommerce_order_get_downloadable_items
フィルタは、WooCommerceで注文に関連するダウンロード可能アイテムを取得する際に使用されます。このフィルタはカスタムデータを追加したり、既存のデータを修正したりするために頻繁に利用されます。具体的には、以下のような機能を実装する際によく使われます。
- ダウンロードリンクにカスタム情報を追加
- ユーザーの役割に基づいてダウンロードできるアイテムを制限
- ファイルの有効期限を追加
- アイテムの表示順序を変更
- プロモーションやクーポンに基づく特別ダウンロードの適用
- 注文ごとのカスタムメタデータを追加
フィルタの概要
- 構文:
add_filter( 'woocommerce_order_get_downloadable_items', 'custom_function_name', 10, 2 );
- パラメータ:
$downloadable_items
(array): ダウンロード可能なアイテムの配列。$order
(WC_Order): 対象の注文オブジェクト。
- 戻り値: フィルタを適用したダウンロード可能アイテムの配列。
- 使用可能なWooCommerceバージョン: 3.0以降
- 使用可能なWordPressバージョン: 4.0以降
サンプルコード
サンプルコード1: カスタムテキストの追加
このサンプルコードは、各ダウンロード商品にカスタムテキストを追加します。
add_filter( 'woocommerce_order_get_downloadable_items', 'add_custom_text_to_downloadable_items', 10, 2 );
function add_custom_text_to_downloadable_items( $downloadable_items, $order ) {
foreach ( $downloadable_items as $key => $item ) {
$downloadable_items[$key]['custom_text'] = '特別オファー';
}
return $downloadable_items;
}
引用元
- WooCommerce Developer Documentation
サンプルコード2: ユーザー役割に基づく項目の制限
このコードは特定のユーザー役割に基づき、ダウンロードアイテムを制限します。
add_filter( 'woocommerce_order_get_downloadable_items', 'restrict_downloadable_items_based_on_role', 10, 2 );
function restrict_downloadable_items_based_on_role( $downloadable_items, $order ) {
if ( !current_user_can( 'administrator' ) ) {
foreach ( $downloadable_items as $key => $item ) {
// 一般ユーザーには特定の商品を除外
if ( $item['product_id'] == 123 ) {
unset( $downloadable_items[$key] );
}
}
}
return $downloadable_items;
}
引用元
- WooCommerce Code Snippets
サンプルコード3: ダウンロードアイテムの非表示
特定の条件に基づいてダウンロードアイテムを非表示にするサンプルです。
add_filter( 'woocommerce_order_get_downloadable_items', 'hide_downloadable_items_conditionally', 10, 2 );
function hide_downloadable_items_conditionally( $downloadable_items, $order ) {
if ( $order->get_total() < 50 ) {
return []; // 合計が50未満の場合はすべてのアイテムを非表示
}
return $downloadable_items;
}
引用元
- WooCommerce Customization Guide
サンプルコード4: ファイルの有効期限を追加
ダウンロードの有効期限を追加するサンプルを示します。
add_filter( 'woocommerce_order_get_downloadable_items', 'add_expiration_to_downloadable_items', 10, 2 );
function add_expiration_to_downloadable_items( $downloadable_items, $order ) {
foreach ( $downloadable_items as $key => $item ) {
$downloadable_items[$key]['expiration'] = strtotime( '+7 days' ); // ダウンロード期限を7日後に設定
}
return $downloadable_items;
}
引用元
- WooCommerce Custom Functionality
サンプルコード5: 表示順序の変更
ダウンロードアイテムの表示順序をカスタマイズするコードです。
add_filter( 'woocommerce_order_get_downloadable_items', 'customize_downloadable_items_order', 10, 2 );
function customize_downloadable_items_order( $downloadable_items, $order ) {
usort( $downloadable_items, function( $a, $b ) {
return $a['product_id'] <=> $b['product_id']; // 商品IDでソート
});
return $downloadable_items;
}
引用元
- WooCommerce Hooks and Filters
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
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 |