Buenas @pepesoler soy Luis, el desarrollador web de covicar.net.
Necesito saber por qué he visto la publicación de vuestro foro una posible solución:
https://www.webempresa.com/foro/pack-tienda-wordpress/pedidos-pendiente-de-pago-en-woocommerce-al-pagar#:~:text=Pendiente%20(pending%20payment)%3A%20Pedido,se%20realice%20el%20pago%20pago.
Estoy teniendo el mismo problema que el reflejado en ese foro, pero en vez de en completado lo quiero en procesado tal cual sale en tu código, principalmente para cuando mi cliente se asegure de que el ingreso en la cuenta se realiza ellos poner que está completado el pedido. Mi cliente sí visitas su web, además solo usa productos físicos ninguno virtual.
El código que expone me lo pueda solucionar:
// Actualiza automáticamente el estado de los pedidos a procesando
add_action( 'woocommerce_order_status_processing', 'actualiza_estado_pedidos_a_completado' );
add_action( 'woocommerce_order_status_on-hold', 'actualiza_estado_pedidos_a_completado' );
function actualiza_estado_pedidos_a_completado( $order_id ) {
global $woocommerce;//ID's de las pasarelas de pago a las que afecta
$paymentMethods = array( 'redsys', 'bacs', 'cheque', 'cod', 'paypal' );if ( !$order_id ) return;
$order = new WC_Order( $order_id );if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
$order->update_status( 'processing' );
}
Lo único que no se es que en la línea 7 del código, cuál es el ID que debo poner de la pasarela que estoy utilizando, que se llama Cecabank:
$paymentMethods = array( 'redsys', 'bacs', 'cheque', 'cod', 'paypal' );
Según he investigado previamente antes de poder acceder al foro, he utilizado perplexity para intentar resolver la consulta:
"Para encontrar el ID de la pasarela de pago que estás utilizando, en este caso Cecabank, debes ir a "WooCommerce > Ajustes > Finalizar compra > Opciones de pago". Al final de la página, verás todas las pasarelas habilitadas y sus respectivos IDs."
Cosa que hice, pero no llegue a encontrar, pero bueno, aun así me brindo otro resultado:
"En el caso de Cecabank, el ID de la pasarela de pago parece ser 'wc_gateway_ceca' según la documentación en GitHub. Por lo tanto, deberías agregar 'wc_gateway_ceca' a la lista de métodos de pago en la línea 7 de tu código. El código quedaría de la siguiente manera:"
$paymentMethods = array( 'redsys', 'bacs', 'cheque', 'cod', 'paypal', 'wc_gateway_ceca' );
Por último, solo quiero que se mantengan en procesando los métodos de pago que son:
—Redsys(inactivo)
—Paypal(inactivo)
—Stripe(inactivo/temporalmente)
—Cecabank(activo)
El resto de maneras de pago que efectúen la acción que tengan que realizar como si se tienen que poner en “en espera” pero que notifique a mi cliente de que se hizo una compra por parte de WooCommerce y a los clientes de mis clientes que se les notifique que se realizó la compra:
—Transferencia Bancaria(activo)
—Pago con cheque(inactivo)
—Contra reembolso(inactivo)
Este fue el resultado que me brindo la IA al preguntarle
"Para eliminar los métodos de pago de transferencia bancaria (bacs), pago por cheque (cheque) y contra reembolso (cod) del código que actualiza automáticamente el estado de los pedidos a procesando en WooCommerce, debes modificar el array
$paymentMethods
en tu código."
"Actualmente, tu código incluye estos métodos de pago:"
$paymentMethods = array( 'redsys', 'bacs', 'cheque', 'cod', 'paypal', 'wc_gateway_ceca' );
"Para eliminar los métodos de pago de transferencia bancaria, pago por cheque y contra reembolso, debes eliminar 'bacs', 'cheque' y 'cod' del array. Ademas para agregar los métodos de pago de Cecabank y Stripe, debes agregar 'wc_gateway_ceca' y 'stripe' al array."
"Tu código modificado se vería así:"
$paymentMethods = array( 'redsys', 'paypal', 'wc_gateway_ceca', 'stripe' );
Bien, entonces mis preguntas son:
¿El código que has expuesto es correcto?
¿Los cambios ejecutados por la IA son correctos?
¿Son realmente esos los ID de los métodos de pago qué yo necesito?
Gracias por su atención
Un cordial saludo
Contenido solo visible a usuarios registrados
Hola Miguel.
Lo único que no se es que en la línea 7 del código, cuál es el ID que debo poner de la pasarela que estoy utilizando, que se llama Cecabank:
En tu caso creo que el ID es cecabank_gateway por lo que el código tendría que ser el siguiente:
// Actualiza automáticamente el estado de los pedidos a procesando
add_action( 'woocommerce_order_status_processing', 'actualiza_estado_pedidos_a_completado' );
add_action( 'woocommerce_order_status_on-hold', 'actualiza_estado_pedidos_a_completado' );
function actualiza_estado_pedidos_a_completado( $order_id ) {
global $woocommerce;
//ID's de las pasarelas de pago a las que afecta
$paymentMethods = array( 'redsys', 'bacs', 'cheque', 'cod', 'paypal', 'cecabank_gateway' );
if ( !$order_id ) return;
$order = new WC_Order( $order_id );
if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
$order->update_status( 'processing' );
}
Puedes eliminar del código las pasarelas de pago que no utilices, supongamos que solo utiliza Caca Bank:
// Actualiza automáticamente el estado de los pedidos a procesando
add_action( 'woocommerce_order_status_processing', 'actualiza_estado_pedidos_a_completado' );
add_action( 'woocommerce_order_status_on-hold', 'actualiza_estado_pedidos_a_completado' );
function actualiza_estado_pedidos_a_completado( $order_id ) {
global $woocommerce;
//ID's de las pasarelas de pago a las que afecta
$paymentMethods = array( 'cecabank_gateway' );
if ( !$order_id ) return;
$order = new WC_Order( $order_id );
if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
$order->update_status( 'processing' );
}
Un Saludo