見出し画像

WooCommerceでダウンロード商品のみの販売の時にメールアドレスのみで購入できるようにする方法

商品をバーチャル商品にします。

WooCommerceの商品ページに出てくる、下記の部分で、
バーチャルにチェックが入っていることを確かめてください。

以下を子テーマのfunctions.phpに追記してください。
通常は、
外観→テーマファイルエディタ
に移動して、functions.phpというファイルを選択すればよいです。
FTPで直接編集でもOKです。

//ダウンロード商品の販売の時にメールアドレスのみで購入できるようにする
add_filter( 'woocommerce_checkout_fields', 'custom_override_checkout_fields_for_virtual_products' );

function custom_override_checkout_fields_for_virtual_products( $fields ) {
    // カート内の商品が全てバーチャルかどうかをチェック
    $all_virtual = true;
    
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        if ( ! $cart_item['data']->is_virtual() ) {
            $all_virtual = false;
            break;
        }
    }
    
    // カート内の商品が全てバーチャルの場合、特定のフィールドを非必須にし、隠す
    if ( $all_virtual ) {
        $fields_to_modify = array(
            'billing_first_name',
            'billing_last_name',
            'billing_company',
            'billing_address_1',
            'billing_address_2',
            'billing_city',
            'billing_postcode',
            'billing_country',
            'billing_state',
            'billing_email',
            'billing_phone'
        );
        
        foreach ( $fields_to_modify as $field ) {
            if ( isset( $fields['billing'][$field] ) ) {
                $fields['billing'][$field]['required'] = false;
                $fields['billing'][$field]['class'][] = 'hide';
            }
        }
        
        // CSSを追加して非表示フィールドを隠す
        add_action( 'wp_footer', 'custom_hide_checkout_fields_css' );
    }
    
    return $fields;
}

function custom_hide_checkout_fields_css() {
    ?>
    <style>
        .woocommerce-billing-fields .hide,
        .woocommerce-additional-fields .hide {
            display: none !important;
        }
    </style>
    <?php
}

これでメールアドレス以外の項目が非表示になりました。
必要に応じて billing_xxxのところを削除してもらえれば、表示したい項目を残すことができます。
CSSで!importantでdisplay消してるのですが、!importantがないと何故か消えません。調べるの面倒なので調べてませんが、お気に召さない方は調べてみてください。

この記事が気に入ったらサポートをしてみませんか?