Este pequeño plugin que os voy a mostrar es un desarrollo a medida que ha necesitado hace poco un cliente. Lo muestro aquí porque es lo suficientemente corto y expresivo como para que en una entrada de blog como esta, pueda resultar útil sin entrar en demasiadas complejidades o en un código excesivamente largo. Veamos.
El problema es el siguiente:
Esto es un problema medianamente normal porque usar contrarrembolso en una tienda online tiene sus riesgos. Tú envías el paquete sin haber recibido nada y luego si el usuario lo rechaza, te llega el paquete devuelto, después de haberlo preparado; y te toca pagar los costes de envío. Así que digamos que este tipo de pagos por contrarrembolso está bien que sean sólo a un grupo de clientes que sabemos que no van a generar problemas.
Así que bueno, vamos al lío, lo primero es saber donde meter este código. Podéis crear un plugin para ello o meterlo en el functions.php de vuestro tema hijo.
Esto es lo primero, articular una forma de que en cada perfil aparezca un selector donde elegir si permitimos contrarrembolso o no:
add_action( 'show_user_profile', 'cod_restringir_contrarrembolso_mostrar_campo' );
add_action( 'edit_user_profile', 'cod_restringir_contrarrembolso_mostrar_campo' );
function cod_restringir_contrarrembolso_mostrar_campo( $user ) {
if( !current_user_can( 'manage_options' ) )
return;
$_restringir_contrarrembolso = get_user_meta( $user->ID, '_restringir_contrarrembolso', true );
?>
<h3>Permitir/restringir contrarrembolso</h3>
<table class="form-table">
<tr>
<th><label for="restringir_contrarrembolso">Restringir contrarrembolso</label></th>
<td>
<select name="restringir_contrarrembolso">
<option value="no" <?php selected( $_restringir_contrarrembolso, "no" ); ?>>Permitir contrarrembolso</option>
<option value="yes" <?php selected( $_restringir_contrarrembolso, "yes" ); ?>>Prohibir contrarrembolso</option>
</select>
</td>
</tr>
</table>
<?php }
Básicamente hacemos lo siguiente:
Los siguiente será hacer que el valor que elija el usuario se guarde en la base de datos. El código es el siguiente:
add_action( 'personal_options_update', 'cod_restringir_contrarrembolso_guardar_campo' );
add_action( 'edit_user_profile_update', 'cod_restringir_contrarrembolso_guardar_campo' );
function cod_restringir_contrarrembolso_guardar_campo( $user_id ) {
if( !current_user_can( 'manage_options' ) )
return;
update_user_meta( $user_id, '_restringir_contrarrembolso', $_POST['restringir_contrarrembolso'] );
} Por partes:
Y bueno, ya que tenemos la información gestionada, nos falta llevar a cabo la acción que estamos buscando:
add_filter( 'woocommerce_available_payment_gateways', 'cod_woocommerce_payment_gateways' );
function cod_woocommerce_payment_gateways( $available_gateways ) {
$_restringir_contrarrembolso = get_user_meta( get_current_user_id(), '_restringir_contrarrembolso', true );
if( $_restringir_contrarrembolso != 'yes' )
return $available_gateways;
unset( $available_gateways[ 'cod' ] );
return $available_gateways;
} Veamos:
Podéis hacer lo mismo para otras pasarelas cambiando el identificador de la misma o cambiando la lógica de las funciones. El identificador de contrarrembolso es cod y el del resto de métodos de pago lo podéis ver fácilmente aquí:
Lo que pongo en negrita es el identificador.Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.
Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…
Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…
¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…
Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…
Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…
Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…