Si alguna vez has creado un cupón de descuento en WooCommerce, sabrás que el formulario no es precisamente corto. Tipo de descuento, importe, fecha de caducidad, restricciones por producto o categoría, límites de uso… son muchos campos para rellenar cada vez.
¿Y si solo necesitas cambiar una fecha o un porcentaje sobre un cupón que ya tienes? Ahí es donde duplicar un cupón te ahorra minutos que, sumados, son horas. En este tutorial te explicaré todo esto y cómo implementar la funcionalidad sin plugin.
Índice
Por qué te interesa esta funcionalidad
WooCommerce ya duplica pedidos, productos y páginas. Pero no cupones. Es una ausencia curiosa, porque los cupones son de las entidades que más se repiten con pequeñas variaciones: el mismo descuento para otra campaña, la misma promoción con otra fecha de caducidad, el mismo código pero para otra categoría de productos.
Sin esta función, tienes dos caminos. Uno: rellenas el formulario entero cada vez, campo por campo, arriesgándote a que se te olvide marcar alguna restricción que sí tenía el cupón original. Dos: usas un plugin solo para esto, que añade una tabla más a tu base de datos y un ajuste más que mantener actualizado.
Ninguno de los dos es ideal. La alternativa es añadir tú mismo un enlace «Duplicar» en el listado de cupones, igual que WooCommerce hace con los pedidos. Es código ligero, vive en tu functions.php (o en un plugin de funciones a medida como te explico aquí, que es lo que yo recomiendo) y hace exactamente lo que necesitas, ni más ni menos.
¿En qué casos te conviene usarla?
No siempre necesitas duplicar un cupón. Pero hay escenarios donde esta función se vuelve imprescindible:
- Campañas recurrentes. Si haces un descuento de Black Friday cada año, no tiene sentido crear el cupón desde cero cada vez. Duplicas el del año pasado, cambias las fechas y listo.
- Variantes de una misma promoción. Un 10% para nuevos clientes y un 15% para clientes recurrentes, con las mismas restricciones de producto pero distinto porcentaje. Duplicar y ajustar un solo campo es mucho más rápido que empezar de cero.
- Cupones por categoría. Si vendes en varias categorías y quieres un cupón equivalente para cada una (misma lógica, distinta restricción de categoría), duplicar te evita repetir toda la configuración de límites de uso y fechas.
- Pruebas A/B. Quieres probar dos códigos distintos con la misma configuración para medir cuál convierte mejor. Duplicar te garantiza que la única variable que cambia es la que tú decides.
Si tu tienda solo crea dos o tres cupones al año y cada uno es distinto de los anteriores, probablemente esta función te aporte poco. Pero si gestionas cupones con cierta frecuencia, la diferencia se nota.
Cómo implementarlo
La solución consiste en dos partes: un filtro que añade el enlace «Duplicar» junto a «Editar» y «Papelera» en WooCommerce > Cupones, y una acción que procesa la duplicación cuando haces clic.
Así queda el código completo:
/**
* Añade el enlace "Duplicar" en la lista de cupones
*/
add_filter( 'post_row_actions', 'exliva_duplicar_cupon_link', 10, 2 );
function exliva_duplicar_cupon_link( $actions, $post ) {
if ( $post->post_type !== 'shop_coupon' ) {
return $actions;
}
if ( ! current_user_can( 'manage_woocommerce' ) ) {
return $actions;
}
$url = wp_nonce_url(
add_query_arg(
array(
'action' => 'exliva_duplicar_cupon',
'post' => $post->ID,
),
admin_url( 'edit.php?post_type=shop_coupon' )
),
'exliva_duplicar_cupon_' . $post->ID
);
$actions['duplicar_cupon'] = '<a href="' . esc_url( $url ) . '">Duplicar</a>';
return $actions;
}
/**
* Procesa la duplicación cuando se hace clic en el enlace
*/
add_action( 'admin_action_exliva_duplicar_cupon', 'exliva_procesar_duplicado_cupon' );
function exliva_procesar_duplicado_cupon() {
$post_id = isset( $_GET['post'] ) ? absint( $_GET['post'] ) : 0;
if ( ! $post_id || ! current_user_can( 'manage_woocommerce' ) ) {
wp_die( 'No tienes permisos para hacer esto.' );
}
check_admin_referer( 'exliva_duplicar_cupon_' . $post_id );
$cupon_original = get_post( $post_id );
if ( ! $cupon_original || $cupon_original->post_type !== 'shop_coupon' ) {
wp_die( 'El cupón no existe.' );
}
$nuevo_codigo = $cupon_original->post_title . '-copia-' . substr( uniqid(), -5 );
$nuevo_cupon_id = wp_insert_post( array(
'post_title' => $nuevo_codigo,
'post_content' => $cupon_original->post_content,
'post_excerpt' => $cupon_original->post_excerpt,
'post_status' => 'draft',
'post_type' => 'shop_coupon',
'post_author' => get_current_user_id(),
) );
if ( is_wp_error( $nuevo_cupon_id ) || ! $nuevo_cupon_id ) {
wp_die( 'Hubo un error al duplicar el cupón.' );
}
$meta_original = get_post_meta( $post_id );
foreach ( $meta_original as $key => $valores ) {
if ( in_array( $key, array( '_used_by', '_edit_lock', '_edit_last' ), true ) ) {
continue;
}
foreach ( $valores as $valor ) {
add_post_meta( $nuevo_cupon_id, $key, maybe_unserialize( $valor ) );
}
}
update_post_meta( $nuevo_cupon_id, 'usage_count', 0 );
wp_safe_redirect( admin_url( 'post.php?action=edit&post=' . $nuevo_cupon_id ) );
exit;
}
¿Dónde pegas esto? En el functions.php de tu tema hijo, o mejor aún, en un plugin de funciones a medida (así no lo pierdes si cambias de tema). Una vez activo, ve a Marketing > Cupones y verás el enlace «Duplicar» junto a cada cupón de la lista al pasar el ratón por encima como te muestro aquí:

Al hacer clic, WooCommerce:
- Copia todo el contenido y la configuración del cupón original (tipo de descuento, importe, restricciones, límites de uso…).
- Genera un código nuevo automáticamente, con el sufijo
-copia-seguido de un identificador único. - Guarda el cupón nuevo como borrador, para que lo revises antes de activarlo.
- Te lleva directo a la pantalla de edición, donde ya puedes ajustar lo que necesites.
Algunas cautelas antes de usarlo
Como con cualquier código que toca directamente functions.php, conviene tener presente lo siguiente:
- El cupón se copia como borrador a propósito. Es una capa de seguridad: evita que un cupón duplicado quede activo por error con la configuración del original (fechas de caducidad incluidas).
- El código generado (
-copia-xxxxx) no es especialmente memorable. Si necesitas códigos con un formato concreto para tus campañas, tendrás que editarlo manualmente después de duplicar. - Si usas un plugin de cupones avanzados que guarde datos fuera del post meta estándar de WooCommerce, revisa si ese plugin necesita algo adicional para que la duplicación sea completa.
- Prueba primero en un entorno de staging si tu tienda tiene mucho tráfico. No debería dar problemas, pero cualquier modificación en
functions.phpmerece una comprobación antes de subir a producción.
Con esto tienes una funcionalidad que WooCommerce debería traer de fábrica y que, con unas pocas líneas de código, se integra como si lo trajera.







Deja una respuesta