Woocommerce é uma plataforma de e-commerce tem grande flexibilidade para definição de regras, estratégias e um número enorme de plugins que maximizam as suas funcionalidades ou agregam novas ao projeto.
Me deparei em um projeto de e-commerce para a rede franquias de escolas de futebol do Ronaldo, a Ronaldo Academy, com uma questão bem singular para woocommerce.
Limitar meios de pagamento por nível de usuário.

Bom, existem algumas formas de fazer isso com plugins, mas apenas uma função que encontrei no CanalWP me resolveu o “problema” de forma simples e prática.

Desabilitar

Digamos que sua loja WooCommerce não permita que clientes (customers) possam utilizar o tipo de pagamento Pagamento na entrega. Essa forma de pagamento, possui o código cod. Sendo assim, vamos acessar o arquivo functions.php e adicionar as seguintes instruções em código PHP:

 

function cwp_cash_delivery_disable_customer( $available_gateways ) {
global $woocommerce;

if ( isset( $available_gateways[‘cod’] ) && current_user_can(‘customer’) ) {
unset( $available_gateways[‘cod’] );
}

return $available_gateways;
}
add_filter( ‘woocommerce_available_payment_gateways’, ‘cwp_cash_delivery_disable_customer’ );

 

A primeira coisa que fazemos é verificar se o tipo de pagamento existe – informando o código, e depois se o usuário logado é do tipo cliente (customer). Se a verificação for verdadeira, desabilitamos a forma de pagamento utilizando o unset.

Para desabilitar mais de uma forma de pagamento, basta duplicar a linha com a instrução unset e trocar o código/ID do outro tipo de pagamento.

 

Habilitar

Talvez você não queira trabalhar com a regra de ocultar ou desabilitar uma forma de pagamento, mas sim de habilitar ou permitir que apenas um tipo de usuário possa utilizá-la. Simples, a mudança no nosso código será mínima.

 

Por exemplo, você quer que apenas gerentes da loja (shop manager) utilizem a opção de pagar com PayPal cujo código/ID é paypal. Veja como o bloco de código deve ficar:

 

function cwp_cash_delivery_enable_shopmanager( $available_gateways ) {
global $woocommerce;

if ( isset( $available_gateways[‘paypal’] ) && !current_user_can(‘shop_manager’) ) {
unset( $available_gateways[‘paypal’] );
}

return $available_gateways;
}
add_filter( ‘woocommerce_available_payment_gateways’, ‘cwp_cash_delivery_enable_shopmanager’ );

 

Aqui nós verificamos se o tipo de usuário é diferente de gerente da loja (shop manager), se for diferente a opção é desabilitada imediatamente. Dessa forma você tem a garantia que nenhum outro tipo de usuário – pois você pode ter vários tipos e níveis em sua loja -, poderá utilizar determinado meio de pagamento.

 


Warning: Trying to access array offset on value of type bool in /home/wwruda/public_html/web/wp-content/themes/rudalov/theme-admin/functions/theme-general-features.php on line 311
Share
4 Comments
  • fevereiro 24, 2021

    Muito bom, estou com um problema parecido.
    No entanto, a limitação não seria pelo tipo de usuário, a limitação seria por produto.

    Exemplo, tal produto aceita pagamento na entrega.
    Outro produto não aceita pagamento na entrega.

    Saberia me orientar como modificar o código acima para conseguir tal efeito?

    No caso, quero desabilitar alguns meios de pagamentos, para um único produto específico.

  • Ivana Klava
    Responder
    novembro 24, 2022

    Olá!

    Eu gostaria que o pagamento via PayPal não pudesse ser utilizado apenas no Brasil, seria apenas para estrangeiros, tem como fazer isso?

    Eu vendo ingresso virtual e tem clientes brasileiros que contestam o pagamento depois de vir ao evento e eu perco o dinheiro…. O PagSeguro aceita a comprovação de entrega do ingresso por e-mail e não perco o valor… Por isso queira deixar o PayPal somente pra estrangeiros.

  • janeiro 14, 2023

    Esse código não funcionou em minha loja

Deixe um comentário