¡Qué rabia da cuando las cosas no funcionan como deben! Pero bueno, si todo fuera siempre como uno espera la vida sería bastante aburrida, y afortunadamente casi todo tiene arreglo. En esta ocasión lo que no funcionaba bien para uno de los lectores de este blog eran los emails de WooCommerce para productos descargables: el email llegaba sin enlace de descarga.
Ya sabes que, cuando vendes en WooCommerce un producto descargable, el email de pedido completado incluye el enlace de descarga del producto. Pero resulta que a veces este email no lleva el dichoso enlace.
Tabla de contenidos
Por qué el email del pedido no incluye el enlace de descarga del producto
Para saber cómo solucionar el problema tendremos que saber, claro está, cuál es la causa.
Ya sabes que, cuando un usuario compra un producto descargable en WooCommerce, lo tiene disponible en tres sitios:
- En la página de Pedido recibido, donde puede descargarlo recién completa el pago
- En la pestaña Descargas de la página Mi cuenta
- En el email de pedido completado
Y es precisamente el correo con el enlace de descarga el que el usuario guarda porque, aunque esta primera vez es muy posible que descargue el archivo directamente desde la página de pedido recibido, si quiere volver a descargarlo en el futuro es mucho más cómodo para él hacerlo desde el enlace incluido en el email que acceder a su cuenta.
Los permisos de descarga de archivos
Para que todo esto funcione correctamente es absolutamente necesario que WooCommerce establezca unos permisos de descarga, de forma que WooCommerce pueda saber qué usuario puede acceder a qué archivo. Y para ello crea una tabla completa en nuestra base de datos, la tabla wp_woocommerce_downloadable_product_permissions, que almacena:
- El ID de la descarga concreta (WooCommerce crea unos enlaces virtuales, para ofuscar la ubicación real del archivo, ya que se pueden establecer limitaciones al número de veces que se descarga un archivo para evitar, por ejemplo, que los enlaces de descarga circulen libremente por internet)
- El ID del producto al que pertenece el archivo
- El ID y la clave del pedido que ha dado acceso a esa descarga
- El ID y el email del usuario
- Datos sobre las descargas del usuario: descargas restantes (si el número está limitado), fecha en que se consiguió acceso, fecha en que expira el acceso y número de veces que se ha descargado el archivo
Es evidente que, sin esta tabla, ninguna funcionalidad relacionada con la descarga de archivos en WooCommerce funcionará.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
La verdadera causa de la «desaparición» de los enlaces de descarga en WooCommerce
Aparte de cosas obvias y que deberíamos descartar de principio, como que se te hayan ido las manos y hayas borrado esa tabla de la base de datos 🙂 la causa suele ser siempre la misma: durante la instalación de WooCommerce, ha fallado la creación de esa tabla.
¿La culpa de esto? Bueno, en realidad se debe a una acumulación de circunstancias, así que la culpa no es de nadie, y de todos al mismo tiempo. O, como decimos en mi tierra, entre todos la mataron y ella sola se murió.
SQL tiene limitaciones de caracteres a la hora de poner nombre a las cosas como las bases de datos, las tablas, las columnas, los índices… En concreto, para una tabla el límite es de 64 caracteres. Es decir, que si intentas crear en una base de datos SQL una tabla con un nombre más largo de 64 caracteres, dará un error y la tabla no se creará.
Ya ves por dónde van los tiros, ¿verdad? Si te pones a contar caracteres, wp_woocommerce_downloadable_product_permissions contiene 47 caracteres (confío en que la herramienta Contar palabras de OOWriter no se haya equivocado). Hasta ahí bien, nos quedan nada menos que 17 caracteres de margen.
Pero ¡ojo! Resulta que wp_ es el prefijo por defecto para las tablas de WordPress, pero se puede cambiar durante la instalación. ¿Lo cambiaste? ¿Elegiste un prefijo especialmente largo? ¿O quizá usaste la instalación en un click de tu hosting y se excedió automatizando el prefijo? En fin, sal de dudas: basta con que vayas a phpMyAdmin y mires. Demasiado largo, ¿verdad?
Cómo solucionar la ausencia de enlaces de descarga en WooCommerce
Ahora que sabes qué ha pasado, la solución comienza a ser lógica: WooCommerce necesita esa tabla, pero si el nombre de la misma con el prefijo establecido para las tablas de WordPress supera los 64 caracteres, sencillamente no puede crearla. Nos toca ponernos el traje de faena.
Sólo hay una solución: cambiar el prefijo de las tablas.
Pero antes, claro está, el disclaimer de rigor: nunca operes sobre la base de datos sin hacer primero una copia de seguridad. Da igual que sepas exactamente lo que tienes que hacer, o que estés siguiendo indicaciones guiadas paso a paso como las de este artículo: siempre puede haber errores o imprevistos, y dañar la base de datos puede significar perder toda tu web.
Cambiar el prefijo de las tablas de WordPress
Aquí hay dos opciones: hacerlo a mano, o automatizar la tarea mediante un plugin. No creas, cada una de ellas tiene sus pros y sus contras. Sin duda, si no estas acostumbrado a trabajar con bases de datos, no te sientes seguro y no sabrías reaccionar ante imprevistos con estas cosas, mejor recurre al plugin.
Pero también debes tener presente que cualquier herramienta automatizada puede fallar, y a veces puede fallar hasta límites insospechados. Así que, si eres un profesional de esto o tienes conocimientos suficientes, lo mejor es que lo hagas tú mismo a mano.
Esto puede hacerse fácilmente con phpMyAdmin, usando el comando RENAME en la pestaña SQL (una vez por cada tabla de la instalación):
RENAME table `wp_options` TO `loquesea_options`;
Si cambias los prefijos manualmente (recuerda que debes cambiarlos en todas y cada una de las tablas) ten presente que también deberás actualizar el dato en el archivo wp-config.php, que es el que almacena el prefijo que WordPress debe utilizar en esa instalación concreta:
/** * Prefijo de la base de datos de WordPress. * * Cambia el prefijo si deseas instalar multiples blogs en una sola base de datos. * Emplea solo números, letras y guión bajo. */ $table_prefix = 'wp_';
Si, por el contrario, prefieres automatizar la tarea, puedes usar Change Table Prefix, que hace precisamente eso: cambiar el prefijo de las tablas de la base de datos por uno generado automáticamente (de un máximo de cinco caracteres de largo) o por el que tú elijas, y también se ocupa de actualizar el dato en wp-config.php.
Sí, lleva sin actualizarse desde la versión 4.5.13 de WordPress, pero a día de hoy funciona perfectamente (la versión actual al momento de escribir esto es la 4.9.4, aunque lo he probado incluso en la 5.0-alpha). Sin embargo recuerda que no es compatible con una instalación multisitio.
Vídeo: Cambiar el prefijo de la base de datos
Aquí ves lo sencillo que es hacerlo con este plugin:
Los enlaces de descarga de WooCommerce vuelven, por fin, al correo electrónico de pedido completado
Vale, el prefijo de las tablas de la base de datos ya está cambiado, y la longitud de los nombres debe ser ahora correcta. ¿Ahora qué?
Porque claro, te preguntarás si tienes que crear manualmente esa tabla, si tienes que reinstalar de nuevo WooCommerce (¡no!) o qué. Pues es muy sencillo: basta con que desactives WooCommerce y, a continuación, lo vuelvas a activar. No temas, no perderás ningún dato, y automáticamente en la activación WooCommerce creará la tabla faltante.
Desde ese momento los enlaces de descargan deberían regresar a su sitio. 🙂
CubeNode dice
Esta explicación es justo lo que andaba buscando, me pasó lo mismo esta mañana y andaba perdido con lo que significaría y cómo solucionarlo. Me ha sido muy útil este post ^^ ¡¡Gracias!!
Enrique J. Ros dice
Me alegra que te haya sido útil 🙂
Un saludo.
Maria dice
Hola.
A mi me pasa algo parecido pero muy raro.
Donde no me sale la opción de descargar es en la página de pedido recibido.
Tengo dos productos, uno gratis y otro con precio, bueno pues en el gratis si me sale la opción de descargar y en el que tiene precio no me da esa opción, pero si me sale en el email de pedido completado.
Me puedes ayudar.
Bracias.
Estella dice
Buenas Enrique, busco algo parecido, y es si en Woocommerce existe la posibilidad de que en los mails de confirmación de pedido te llegue algún link hacia el pedido que acabas de realizar, entiendo que si tienes un usuario registrado te podría dejar ver el pedido, el estado y el histórico de pedidos en tu cuenta, no?
Pero no me llega ningún enlace hacia mi cuenta y mis pedidos. No sé si esto es así o es posible arreglarlo
Gracias
Enrique J. Ros dice
Hola Estella
Poderse hacer se puede, aunque no conozco ningún plugin que lo haga. Supongo que habría que programarlo.
Un saludo
Eduardo dice
Buenas, te hago una consulta, como puedo hacer que en el email de descarga n aparezca el link del producto y solo aparezca el link de descarga del producto