Si llevas un tiempo con tu tienda, seguro que tu listado de cupones parece ya un cajón de sastre: el de Black Friday, el de Navidad, el de la influencer de turno, el de compensación por un pedido que llegó tarde… Y no, no los quieres todos funcionando a la vez.
El problema es que WooCommerce no tiene un botón para activar y desactivar cupones. O está publicado y funciona, o lo borras. ¿Y qué haces entonces cuando el año que viene vuelva el Black Friday? ¿Crearlo otra vez desde cero con todas sus restricciones?
En este tutorial vamos a añadir un interruptor para activar y desactivar cupones en WooCommerce sin borrarlos: desde el listado con un clic, en lote para varios a la vez y desde dentro de cada cupón. Todo con un snippet, sin plugins.
Índice
- ¿Por qué WooCommerce no deja pausar un cupón?
- Cuándo te conviene usarlo
- Cómo funciona por dentro: el truco del borrador
- El código para activar y desactivar cupones en WooCommerce
- Cómo usarlo en el día a día
- Lo que debes saber antes de usarlo
- Preguntas frecuentes
- ¿Se pierden las estadísticas de uso de un cupón al desactivarlo?
- ¿Puedo programar que un cupón se active y se desactive solo en unas fechas?
- ¿Funciona con los cupones de plugins como Advanced Coupons o Smart Coupons?
- ¿Qué diferencia hay entre desactivar un cupón y ponerle fecha de caducidad?
- ¿Puedo mostrar un mensaje propio, del tipo «este cupón no está disponible ahora»?
- Conclusión
- Deja una respuesta Cancelar la respuesta
¿Por qué WooCommerce no deja pausar un cupón?
Porque para WooCommerce un cupón es una entrada más, como un producto o un post. Y no tiene un estado de «pausado». Si buscas cómo desactivar un cupón de WooCommerce sin borrarlo, te vas a encontrar con tres opciones nativas. Y ninguna termina de servir:
- Borrarlo. Es lo más rápido, pero pierdes toda la configuración: importe, restricciones, productos excluidos, límites de uso… La próxima campaña toca montarlo de nuevo (y rezar para no olvidarte de ninguna restricción).
- Ponerle fecha de caducidad. Sirve para cortar un cupón en una fecha concreta, pero no para encenderlo y apagarlo cuando quieras. Para reactivarlo tienes que entrar, cambiar la fecha y acordarte de volver a cambiarla. Y si lo quieres cortar hoy mismo porque se ha filtrado, vas tarde.
- Desactivar los cupones en toda la tienda. Desde WooCommerce > Ajustes > General > Activar el uso de cupones puedes apagarlos todos. Pero es matar moscas a cañonazos: apagas los que no quieres y también los que sí. Lo tienes explicado en el artículo sobre cómo quitar el aviso de cupones en WooCommerce.
Lo que de verdad necesitamos es algo tan simple como un interruptor: encendido, funciona; apagado, no funciona, pero sigue ahí con todo configurado esperando la siguiente campaña.
Cuándo te conviene usarlo
No todas las tiendas lo necesitan. Si tienes dos cupones y los dos están siempre activos, sigue leyendo por curiosidad, pero no te hace falta. Donde de verdad marca la diferencia es cuando tus cupones van por campañas o por personas. Estos son los casos en los que más lo uso:

- Campañas que vuelven cada año. Black Friday, Navidad, rebajas de enero, San Valentín… Creas el cupón una vez con todas sus restricciones y cada año solo tienes que encenderlo. Si estás preparando una campaña grande, te interesa también la guía de descuentos masivos en WooCommerce.
- Cupones de influencers y afiliados. Cada colaboradora tiene su código, pero solo quieres que funcione mientras dura la colaboración. Cuando termina, lo apagas. Si vuelve a colaborar dentro de seis meses, lo enciendes y listo, con sus estadísticas de uso intactas.
- Un cupón que se ha filtrado. Ese código que mandaste solo a tu lista de correo y que de repente aparece en una web de cupones (pasa más de lo que crees). Con un clic deja de funcionar al momento, sin borrarlo ni tocar fechas.
- Cupones de compensación o atención al cliente. El típico «te regalamos un 10 % por las molestias». Lo tienes preparado y apagado, y solo lo activas cuando lo necesitas.
- Cupones por URL. Si aplicas cupones con un enlace, como te explico en cupones de descuento mediante un enlace o URL, no querrás que ese enlace siga funcionando cuando la campaña ha terminado.
- Cupones de primera compra o para registrados. Si has montado algo como lo que explico en cupones solo para usuarios registrados y primera compra, puede que quieras pausarlo en temporada alta, cuando ya vendes sin necesidad de descuento.
En resumen: si alguna vez has borrado un cupón para volver a crearlo igualito unos meses después, este tutorial es para ti.
Cómo funciona por dentro: el truco del borrador
Antes de pegar código, conviene entender qué vamos a hacer, porque es más sencillo de lo que parece. No vamos a inventar ningún estado nuevo: vamos a usar el estado borrador que WordPress ya tiene.
Cuando un cliente escribe un código en el carrito, WooCommerce busca un cupón con ese código, pero solo entre los cupones publicados. Si el cupón está en borrador, para WooCommerce sencillamente no existe y no se aplica.

Piénsalo como la diferencia entre la papelera y un cajón. Borrar un cupón es tirarlo a la papelera. Pasarlo a borrador es guardarlo en el cajón: no está a la vista, pero cuando lo necesites lo sacas tal cual lo dejaste.
Así que nuestro interruptor hace solo esto:
- Encendido = cupón publicado. Funciona.
- Apagado = cupón en borrador. No funciona, pero conserva su importe, sus restricciones, sus límites y su contador de usos.
¿Y por qué no hacerlo a mano cambiando el estado desde la edición del cupón? Se puede, pero es lento y poco claro: tienes que entrar en cada cupón, y en el listado no ves de un vistazo cuáles están activos. El snippet te da un interruptor visible para cada cupón, acciones en lote y una casilla clara dentro del cupón.
El código para activar y desactivar cupones en WooCommerce
Puedes añadirlo de dos formas:
- En el archivo functions.php de tu tema hijo (nunca en el del tema padre, o lo perderás en la próxima actualización).
- Con un plugin como Code Snippets, que es lo que te recomiendo si no te manejas con FTP: lo pegas, lo activas y, si algo falla, lo desactivas con un clic. Te lo explico aquí en profundidad.
El snippet añade cinco cosas: la columna «Activo» en el listado, la acción del interruptor, las acciones en lote, la casilla dentro del cupón y los estilos del interruptor.
/**
* Interruptor para activar / desactivar cupones de WooCommerce
* Un cupón desactivado pasa a "borrador": WooCommerce no lo encuentra
* al aplicarlo, pero conserva toda su configuración.
*/
/* 1. Columna "Activo" en el listado de cupones */
add_filter( 'manage_edit-shop_coupon_columns', function ( $columns ) {
$new = [];
foreach ( $columns as $key => $label ) {
$new[ $key ] = $label;
if ( 'coupon_code' === $key ) {
$new['dl_activo'] = 'Activo';
}
}
return $new;
} );
add_action( 'manage_shop_coupon_posts_custom_column', function ( $column, $post_id ) {
if ( 'dl_activo' !== $column ) {
return;
}
$activo = 'publish' === get_post_status( $post_id );
$url = wp_nonce_url(
admin_url( 'admin-post.php?action=dl_toggle_cupon&cupon=' . $post_id ),
'dl_toggle_cupon_' . $post_id
);
printf(
'<a href="%1$s" class="dl-toggle %2$s" title="%3$s" aria-label="%3$s"><span></span></a>',
esc_url( $url ),
$activo ? 'is-on' : 'is-off',
$activo ? 'Desactivar cupón' : 'Activar cupón'
);
}, 10, 2 );
/* 2. Acción del interruptor */
add_action( 'admin_post_dl_toggle_cupon', function () {
$id = isset( $_GET['cupon'] ) ? absint( $_GET['cupon'] ) : 0;
check_admin_referer( 'dl_toggle_cupon_' . $id );
if ( ! $id || 'shop_coupon' !== get_post_type( $id ) || ! current_user_can( 'edit_post', $id ) ) {
wp_die( 'No tienes permisos para modificar este cupón.' );
}
$nuevo_estado = 'publish' === get_post_status( $id ) ? 'draft' : 'publish';
wp_update_post( [ 'ID' => $id, 'post_status' => $nuevo_estado ] );
wp_safe_redirect( wp_get_referer() ?: admin_url( 'edit.php?post_type=shop_coupon' ) );
exit;
} );
/* 3. Acciones en lote */
add_filter( 'bulk_actions-edit-shop_coupon', function ( $actions ) {
$actions['dl_activar'] = 'Activar';
$actions['dl_desactivar'] = 'Desactivar';
return $actions;
} );
add_filter( 'handle_bulk_actions-edit-shop_coupon', function ( $redirect, $action, $ids ) {
if ( ! in_array( $action, [ 'dl_activar', 'dl_desactivar' ], true ) ) {
return $redirect;
}
$estado = 'dl_activar' === $action ? 'publish' : 'draft';
$total = 0;
foreach ( $ids as $id ) {
if ( current_user_can( 'edit_post', $id ) ) {
wp_update_post( [ 'ID' => $id, 'post_status' => $estado ] );
$total++;
}
}
return add_query_arg( [ 'dl_cupones' => $total, 'dl_estado' => $estado ], $redirect );
}, 10, 3 );
add_action( 'admin_notices', function () {
if ( empty( $_GET['dl_cupones'] ) ) {
return;
}
$total = absint( $_GET['dl_cupones'] );
$accion = ( isset( $_GET['dl_estado'] ) && 'publish' === $_GET['dl_estado'] ) ? 'activados' : 'desactivados';
printf(
'<div class="notice notice-success is-dismissible"><p>%d cupón(es) %s.</p></div>',
$total,
esc_html( $accion )
);
} );
/* 4. Casilla "Cupón activo" dentro del cupón (pestaña General) */
add_action( 'woocommerce_coupon_options', function ( $coupon_id ) {
$estado = get_post_status( $coupon_id );
// Cupón nuevo (auto-draft) => activo por defecto.
$activo = in_array( $estado, [ 'publish', 'auto-draft', 'future' ], true ) ? 'yes' : 'no';
echo '<input type="hidden" name="dl_cupon_activo_enviado" value="1">';
woocommerce_wp_checkbox( [
'id' => 'dl_cupon_activo',
'label' => 'Cupón activo',
'description' => 'Desmárcalo para desactivar el cupón sin borrarlo.',
'value' => $activo,
'cbvalue' => 'yes',
] );
} );
add_filter( 'wp_insert_post_data', function ( $data ) {
if (
'shop_coupon' !== $data['post_type']
|| empty( $_POST['dl_cupon_activo_enviado'] )
|| ! in_array( $data['post_status'], [ 'publish', 'draft' ], true )
) {
return $data;
}
$data['post_status'] = ! empty( $_POST['dl_cupon_activo'] ) ? 'publish' : 'draft';
return $data;
} );
/* 5. Estilos del interruptor */
add_action( 'admin_head', function () {
$screen = get_current_screen();
if ( ! $screen || 'edit-shop_coupon' !== $screen->id ) {
return;
}
?>
<style>
.column-dl_activo { width: 70px; text-align: center; }
.dl-toggle { display: inline-block; width: 38px; height: 20px; border-radius: 20px; position: relative; transition: background .2s; vertical-align: middle; }
.dl-toggle span { position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: #fff; transition: left .2s; box-shadow: 0 1px 2px rgba(0,0,0,.3); }
.dl-toggle.is-on { background: #00a32a; }
.dl-toggle.is-on span { left: 20px; }
.dl-toggle.is-off { background: #c3c4c7; }
.dl-toggle:focus { box-shadow: 0 0 0 2px #2271b1; outline: none; }
</style>
<?php
} );
Un par de detalles por si te interesa lo que pasa por debajo:
- Seguridad: el interruptor usa un nonce y comprueba que el usuario pueda editar ese cupón. Nadie puede activar o desactivar cupones pegando una URL.
- La casilla manda: al guardar el cupón, el estado depende de la casilla «Cupón activo», no del botón que pulses. Así evitamos líos entre «Publicar» y «Guardar borrador».
- Cupones nuevos: la casilla sale marcada por defecto, así que un cupón nuevo nace activo, como siempre.
Cómo usarlo en el día a día
Con el código activo, ve a Marketing > Cupones. Tienes tres formas de encender y apagar cupones, según lo que necesites en cada momento.
1. Con el interruptor del listado
Verás una nueva columna «Activo» justo después del código del cupón. Verde, el cupón funciona. Gris, está apagado. Un clic y cambia de estado.
Es la forma más rápida, la que usarás el 90 % de las veces. Y de paso te sirve para ver de un vistazo qué cupones están funcionando ahora mismo en tu tienda.
2. Con las acciones en lote

¿Empieza el Black Friday y tienes que encender cinco cupones a la vez? Marca las casillas de esos cupones, abre el desplegable Acciones en lote, elige Activar o Desactivar y pulsa Aplicar. Arriba te aparecerá un aviso con cuántos cupones se han cambiado.
3. Desde dentro del cupón
Si estás editando un cupón, en la pestaña General de Datos del cupón tienes la casilla «Cupón activo». Desmárcala, guarda, y el cupón queda apagado sin perder nada.
Viene muy bien cuando estás preparando una campaña con antelación: configuras el cupón con calma, lo dejas desactivado y el día que empieza lo enciendes desde el listado.

Lo que debes saber antes de usarlo
El interruptor es sencillo, pero hay cuatro cosas que conviene tener claras para que no te pillen por sorpresa.
- El cliente verá que el cupón «no existe». Si alguien escribe un código desactivado, WooCommerce muestra su mensaje de siempre: que el cupón no se puede aplicar porque no existe. Para la mayoría de tiendas es suficiente. Si prefieres un mensaje propio, lo vemos en las preguntas frecuentes.
- Si ya lo tenía en el carrito, se le quita. Al cargar el carrito o el checkout, WooCommerce vuelve a comprobar los cupones aplicados. Si uno está apagado, lo elimina y avisa al cliente de que el cupón no es válido y se ha quitado de su pedido. Nadie se cuela con un cupón apagado.
- Los pedidos ya hechos no cambian. Desactivar un cupón no toca los pedidos que ya lo usaron: el descuento sigue ahí y sus estadísticas también.
- Dentro del cupón manda la casilla. Si dejas marcada «Cupón activo» y pulsas Guardar borrador, el cupón se publica igualmente. Es a propósito, para que solo haya una forma de decidir si está activo.
Y un consejo de los de siempre: pruébalo antes en un entorno de pruebas, sobre todo si usas plugins de cupones que aplican descuentos automáticamente. Cada plugin busca los cupones a su manera.
Preguntas frecuentes
¿Se pierden las estadísticas de uso de un cupón al desactivarlo?
No. El contador de usos, los límites y todo lo demás se guardan en el propio cupón, y el cupón no se borra. Cuando lo vuelvas a activar, seguirá contando desde donde lo dejaste. Los informes de ventas tampoco cambian, porque se basan en los pedidos.
¿Puedo programar que un cupón se active y se desactive solo en unas fechas?
Este snippet no lo hace: es un interruptor manual. Para el final de una campaña puedes usar la fecha de caducidad nativa de WooCommerce, que se combina sin problema con el interruptor. Si quieres que se encienda y se apague solo en fechas concretas, se puede ampliar con WP-Cron, pero eso da para otro artículo.
¿Funciona con los cupones de plugins como Advanced Coupons o Smart Coupons?
Con los cupones normales de WooCommerce funciona siempre, porque usa el mismo sistema con el que WooCommerce busca los cupones. Con plugins que añaden funciones extra, como aplicar cupones automáticamente, depende de cómo los busque cada plugin. Pruébalo antes en un entorno de pruebas.
¿Qué diferencia hay entre desactivar un cupón y ponerle fecha de caducidad?
La fecha de caducidad corta el cupón en un día concreto y es ideal cuando sabes de antemano cuándo acaba la campaña. El interruptor lo apaga y lo enciende cuando tú quieras, al momento y sin tocar fechas. Lo más práctico es usar las dos cosas: caducidad para el final previsto e interruptor para todo lo imprevisto.
¿Puedo mostrar un mensaje propio, del tipo «este cupón no está disponible ahora»?
Sí, aunque requiere un enfoque distinto. En lugar de pasar el cupón a borrador, se deja publicado, se guarda su estado en un campo propio y se invalida con el filtro woocommerce_coupon_is_valid, que permite devolver el mensaje que tú quieras. Si te interesa esta versión, déjamelo en los comentarios.
Conclusión
Con unas pocas líneas de código has convertido tu listado de cupones en un panel de control: ves de un vistazo cuáles funcionan, los enciendes y los apagas con un clic y no vuelves a crear el mismo cupón dos veces.
Mi consejo personal es que tengas activos solo los cupones que estás comunicando ahora mismo. Un cupón olvidado y activo es un descuento que no controlas, y tarde o temprano acaba en una web de cupones. Todo lo demás, al cajón.
Si estás empezando con los cupones, te recomiendo repasar antes cómo crear cupones con WooCommerce, donde explico cada opción de configuración. Y si tienes cualquier duda con el snippet, déjamela en los comentarios.