Woocommerce para WordPress: ¿Cómo modificar el número/id de pedido?

4 minutos de lectura

avatar de usuario
Kalipto

Implementé WooCommerce en mi tienda web y conecté una pasarela CorvusPay para el pago en línea.

Ahora, el problema que tenemos es que Corvus requiere que mis números de pedido contengan caracteres (mayúsculas y minúsculas) junto con números.

He visto y probado muchos complementos y filtros sobre cómo cambiar los números de mi pedido dentro de WordPress, pero mientras el pedido se procesa y se envía a Corvus, el número sigue siendo el mismo ID de publicación anterior.

Soy consciente de que WooCommerce usa ID de publicación de WordPress para crear los números de pedido iniciales, pero ¿cómo puedo cambiar esto?

¿Cómo puedo modificar WooCommerce para que use un método específico de generación de números de pedido, es decir, me gustaría que los números de pedido fueran, por ejemplo, “Kr-12345” y no “12345”.

Necesito una forma de cambiar su método de generación de números y no usar un complemento como Números de orden secuencial, ya que eso solo cambia los números en mi página de WordPress.

avatar de usuario
dibujó angell

Puedes usar el woocommerce_order_number gancho para filtrar el valor como quieras. esta guía explica cómo usarlo para simplemente agregar un prefijo y un sufijo.

add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );

function change_woocommerce_order_number( $order_id ) {
    $prefix = 'VK/';
    $suffix = '/TS';
    $new_order_id = $prefix . $order_id . $suffix;
    return $new_order_id;
}

Así que parece que esto haría lo que quieres. Puede simplemente eliminar el sufijo si no lo necesita, o hacer los ajustes necesarios al formato de $new_order_id.

Otra cosa a tener en cuenta es que si está utilizando un complemento como PayPal para WooCommerce tiene una opción para establecer un prefijo de factura incorporado.

  • Probé esa solución exacta, pero el problema era que todavía no enviaba ese número de pedido a corvus; porque, lo primero que hace es obtener la identificación de la publicación, lo establece como un número de orden, envía ese número a corvus y luego va a mi wordpress donde el filtro lo modifica. La guía termina con esto: “WooCommerce proporciona otro filtro woocommerce_new_order_data que le permite modificar los datos del pedido justo antes de que se inserten en la tabla wp_posts usando wp_insert_post(). Veremos eso en otra publicación”. Pero no encuentro nada relacionado con esto…

    – Kalipto

    20 de septiembre de 2017 a las 11:27

Esto parece otro caso en el que el desarrollador de la puerta de enlace no implementa la puerta de enlace correctamente. Para mi respuesta, asumo que estás usando Integración con CorvusPay WooCommerce.

si tu en el process_payment() función en clases.php Verá que el complemento siempre envía el post_id real para el pedido a la puerta de enlace cada vez:

/**
 *  This method accepts payment request initiated by user, and redirects
 *  him to CorvusPay IPG.
 * @param int $order_id
 * @return array
 */
public function process_payment($order_id) {
    // Load options
    $options = $this->_getOptions();
    $checkout_page_id = $options[CpsiKeys::OPTION_CHECKOUT_PAGE_ID];

    return array(
        'result' => 'success',
        'redirect' => add_query_arg('order_id', $order_id, get_permalink($checkout_page_id))
    );
}

Esto significa que no importa qué truco intente, no podrá solucionar el problema sin que esta función se modifique porque el complemento siempre envía la información incorrecta (o al menos en el formato incorrecto).

Hay una serie de soluciones para esto:

  1. (Recomendado) Solicite al desarrollador del complemento que agregue un campo a la página de configuración del pago que le brinde al usuario la opción de enviar una identificación de pedido prefijada.
  2. (Arriesgado) Modifique el código del complemento y fuerce un prefijo por ahora. Esto es arriesgado porque el desarrollador podría actualizar el complemento que sobrescribiría sus cambios, sin embargo, dado que el complemento solo se actualiza cada tantos meses, puede ser su única solución. Intenta cambiar el código a algo como lo siguiente:

/**
 *  This method accepts payment request initiated by user, and redirects
 *  him to CorvusPay IPG.
 * @param int $order_id
 * @return array
 */
public function process_payment($order_id) {
    // Load options
    $options = $this->_getOptions();
    $checkout_page_id = $options[CpsiKeys::OPTION_CHECKOUT_PAGE_ID];

    return array(
        'result' => 'success',
        'redirect' => add_query_arg('order_id', 'ABx' . $order_id, get_permalink($checkout_page_id))
    );
}

Donde ABx es su prefijo.

Koda

  • ¡Gracias por la ayuda! Probé la corrección del código y cambia en la barra de direcciones, pero mientras se envía simplemente se detiene y se redirige a mi página de inicio como si nada hubiera pasado. También me he puesto en contacto con Corvus sobre esto y espero que puedan resolver algo.

    – Kalipto

    22 de septiembre de 2017 a las 9:11

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad