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

概要

woocommerce_available_downloadsフィルタは、WooCommerceでダウンロード可能な商品の一覧を取得したり、変更したりする際に使用されます。このフィルタは特にデジタル商品を扱う際に非常に便利です。たとえば、特定の条件でダウンロードリンクを変更したり、特定のユーザーに対してしか表示しないようにしたりといったカスタマイズが可能です。以下に、一般的な利用ケースを示します。

  1. ユーザーの権限に基づいてダウンロード可能なファイルを制御する。
  2. 特定の条件を満たす場合にのみダウンロードリンクを表示する。
  3. ダウンロードリンクの表示テキストをカスタマイズする。
  4. 商品の再ダウンロード制限を設定する。
  5. カスタムメタデータに基づいてダウンロード可能なファイルをフィルタリングする。
  6. 特定のカテゴリに属する商品のダウンロードファイルを制御する。

構文

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;
}

このサンプルは、ダウンロードファイルを名前順にソートします。

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


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