2016-05-03 22 views
1

私はWoothemesチェックアウトフィールドエディタで "po_number"というラベルのカスタムWooCommerceチェックアウトフィールドを作成しました。私はPO番号チェックアウトフィールドをユーザロール "ディストリビューター"のためだけに表示したいと思います。WooCommerceチェックアウトフィールドを無効にすることができません

これまでのところ、チェックアウトフィールドをオーバーライドするのに失敗しました。私はWordpress 4.5.1/Woocommerce 2.5.5を使用しています。ここで私の子供のテーマのfunctions.phpに配置したコードです。私はまた、それがテーマの競合ではないことを確認するためにテストしました。

ご協力いただきまして誠にありがとうございます。

これは私のコードです:

function custom_override_checkout_fields($fields) { 

    if (! current_user_can('distributor') && isset($fields['billing']['po_number'])) { 
     unset($fields['billing']['po_number']); 

    } 
    return $fields; 
} 
add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields'); 

答えて

0

current_user_can()機能は、ユーザーの役割の機能に関連しているが、ユーザーの役割自体を検出することがありません。その理由からあなたのコードでは動作していません。

あなたは、この目的のために条件関数(ユーザーの役割)を設定する必要があります。

function is_user_role($role, $user_id = null) { 
    if (is_numeric($user_id)) { 
     $user = get_userdata($user_id); 
    } else { 
     $user = wp_get_current_user(); 
    } 
    if (empty($user)) { 
     return false; 
    } 
    if (in_array($role, (array) $user->roles) == 1) { 
     return true; 
    } else { 
     return false; 
    } 
} 

次に、あなたのコードの中で、あなたがその機能を使用することができます。

function custom_override_checkout_fields($fields) { 
    if (!is_user_role('distributor') && isset($fields['billing']['po_number'])) { 
     unset($fields['billing']['po_number']); 
    } 
     return $fields; 
} 
add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields'); 

これはあなたのコードで動作するはずです。

+0

それはトリックでした。ご協力いただきありがとうございます! – Kevin

関連する問題