Si en WooCommerce necesitas comprobar si una pasarela de pago esta activa. Puedes obtener un listado de las pasarelas de pago (gateways) disponibles en el sitio con la función:
WC()->payment_gateways->get_available_payment_gateways();
El problema de esta función es que estas instanciando WooCommerce y en algunos casos, algunas pasarelas dejan de registrarse o se esconden por motivos de seguridad. Esto hace que fallen mas adelante cuando realmente deben mostrarse en el checkout. Además, si necesitas comprobar si una pasarela pago está activa en un momento donde no se ha cargado WooCommerce. Necesitas una alternativa a esta función
Comprobar si una pasarela pago está activa desde la base de datos
Una alternativa segura es consultar la información directamente desde la base de datos. Así no necesitas implementar o instanciar objetos. El costo de la consulta es mínimo y queda en caché para futuros accesos (si se usa $wpdb).
WooCoommerce guarda la información de una pasarela de pagos en la base de datos en la tabla options bajo el nombre «woocommerce_idDelGateway_settings». Si el id de tu pasarela es «pagos_con_tarjeta» entonces la información se guarda bajo el nombre woocommerce_pagos_con_tarjeta_settings.
Como la información se guarda en formato JSON. Sólo necesitamos contar el registro bajo el nombre anterior que tenga el valor enabled: true dentro del contenido del JSON.
Para ello hacemos la siguiente función que buscará si existe el valor o no:
function is_enabled($gateway_name) {
global $wpdb;
$query = "SELECT COUNT(*) FROM $wpdb->options "
. "WHERE `option_name` ='woocommerce_${gateway_name}_settings' "
. "AND `option_value` LIKE '%\"enabled\";s:3:\"yes\"%'";
$count = $wpdb->get_var( $query );
return $count > 0;
}
Esta función dependiendo del contexto, puedes ponerla en el archivo functions.php o en el código de tu plugin. Puedes llamarla en cualquier momento ya que $wpdb se instancia temprano en la carga de WordPress.
¡Listo! Con esto podrás leer directamente desde la base de datos si comprobar si una pasarela pago está activa o desactivada. Sin afectar el funcionamiento de WooCommerce.
Deja un comentario