質問: 'customer' ) { unset( $available_gateways['cheque'] ); } return $available_gateways; } 「小切手」は、請求書の支払いに使用される支払いゲートウェイの名前です。まだ機能していないので、何が足りないのでしょうか。任意の助けは大歓迎です!
回答: woocommerceの質問に答えてください...賭けてすぐに彼を燃やしてください!上記のコールバック関数にはいくつか問題があります。 あなたはglobal $woocommerceを宣言していないので、$woocommerceグローバル変数にアクセスすることはできません。 $woocommerce->customerはwc_customerクラスの状態を保持しますが、このクラスにはget_role()メソッドは含まれていません。さらに、コールバック内のどこにも$role変数の値を定義していないため、メソッドが存在しても機能しません。 代わりに、wp_userオブジェクトに返されたroles配列のユーザーロールを調べます。add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_private' ); function payment_gateway_disable_private( $available_gateways ) { $user = wp_get_current_user(); if ( isset( $available_gateways['authorize'] ) && in_array('company', $user->roles) ) { unset( $available_gateways['authorize'] ); } else if ( isset( $available_gateways['cheque'] ) && in_array('customer', $user->roles) ) { unset( $available_gateways['cheque'] ); } return $available_gateways; } 注:ユーザーがログアウトしている場合、そのユーザーは役割を持たないため、そのことを考慮して、ユースケースに応じて買い物の前に最初にログインするようにユーザーをリダイレクトするなどの別の方法を使用できます。is_user_logged_in()を使用できます。