プラグインWooCommerceのwoocommerce_order_get_downloadable_itemsフィルタの使用方法・解説

概要

woocommerce_order_get_downloadable_items フィルタは、WooCommerceで注文に関連するダウンロード可能アイテムを取得する際に使用されます。このフィルタはカスタムデータを追加したり、既存のデータを修正したりするために頻繁に利用されます。具体的には、以下のような機能を実装する際によく使われます。

  1. ダウンロードリンクにカスタム情報を追加
  2. ユーザーの役割に基づいてダウンロードできるアイテムを制限
  3. ファイルの有効期限を追加
  4. アイテムの表示順序を変更
  5. プロモーションやクーポンに基づく特別ダウンロードの適用
  6. 注文ごとのカスタムメタデータを追加

フィルタの概要

  • 構文: 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

この関数について質問する


上の計算式の答えを入力してください