Olá,
Para fazer isso é fácil, mas vou fazer de forma manual, depois você pode melhorar.
1. Abra o arquivo
https://github.com/opencart/opencart/bl ... od.php#L53 e substitua toda a linha pelo código abaixo:
Código: Selecionar todosif ($this->session->data["shipping_method"]["code"] == "free.free") {
$method = $this->{'model_extension_payment_cod'}->getMethod($this->session->data['payment_address'], $total);
$method_data[$result['code']] = $method;
break;
} elseif ($result['code'] == "cod") {
continue;
} else {
$method = $this->{'model_extension_payment_' . $result['code']}->getMethod($this->session->data['payment_address'], $total);
}
Ps.: Substitua o
cod pela forma de pagamento que você deseja exibir somente para determinado frete. (Altere as duas linhas)
Ps².: Substitua o
free.free pelo ID da forma de envio que você deseja apareça uma determinada forma de pagamento.
Ps³.: Pada descobrir o ID da forma de envio, basta acessar o arquivo em
catalog/model/extension/shipping/NOME-DO-FRETE.php e verificar em
Ps4.: Para descobrir o ID da forma de pagamento, basta acessar o arquivo em
catalog/model/extension/payment/PAGAMENTO.php e seguir o passo anterior.
Ps5.: As formas de pagamento e envio devem está configuradas corretamente.
---
No meu caso eu deixei dessa forma:
Quando o usuário escolher a forma de envio "Free Shipping", o usuário só terá a opção de pagamento "Cash On Delivery"; Caso o usuário escolha outra opção de frete, exemplo "Flat Shipping Rate", ele não terá acesso a opção de pagamento "Cash On Delivery"