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.
RedSys aparte de los pagos normales, llamados autorizaciones, acepta una variedad de operaciones: desde autorizaciones…
WooCommerce permite ordenar los productos de una forma nativa, para poder presentar primero los que…
Cada vez que hay una actualización grande del núcleo WordPress, por defecto WordPress te instala…
Una pantalla LCD es una pantalla delgada y hecha de cristal líquido. Se usa en…
De todos los plugins que existen para Gravity Forms, que son numerosos porque la propia…
Un CMS, como WordPress, facilita la creación y gestión de contenido en la web, sin…