WOOT - WooCommerce Active Products Tables

Abrir enlaces de producto en la misma pestaña en una tabla de productos WooCommerce

En una tabla de productos WooCommerce, los enlaces se abren por defecto en una pestaña nueva: el título del producto, la miniatura, los enlaces de categorías y etiquetas, y los botones Carrito de la tienda (Shop cart) y Finalizar compra (Checkout) del carrito de la tabla. La idea es mantener abierta la página de la tabla mientras el cliente mira un producto, pero muchas tiendas quieren que todos los enlaces se abran en la misma pestaña, o que no haya ningún enlace. En los ajustes de la tabla no hay ningún interruptor para el destino del enlace. Los títulos de producto se cambian con un filtro; los demás enlaces necesitan unas pocas líneas de JavaScript. Ambas soluciones se explican a continuación, junto con las opciones que eliminan los enlaces por completo.

Qué enlaces se abren en una pestaña nueva y qué los controla

La pestaña nueva procede del atributo HTML target="_blank". El plugin lo añade en distintos lugares, así que la solución depende del enlace:

EnlaceDe dónde viene el destinoCómo cambiarlo
Título del productoEl filtro woot_link_target_type, valor predeterminado _blankFiltro PHP
MiniaturaFijo en el pluginJavaScript
Categorías, etiquetas y atributos en sus columnasFijo en el pluginJavaScript, o mostrarlos como texto
Carrito de la tienda (Shop cart) y Finalizar compra (Checkout) en el panel del carrito y en su ventana emergenteFijo en el script del carrito del pluginJavaScript, u ocultar los botones
El botón de los productos externos (de afiliado)Fijo en el script del carrito del pluginJavaScript
Enlaces dentro de una descripción abierta con más (more)Se establece al expandir el textoJavaScript

No edites los archivos del plugin para cambiar estos atributos. Cada actualización los sustituye y los enlaces vuelven a abrirse en una pestaña nueva sin previo aviso. El filtro y el script de abajo residen en tu tema o en un plugin de fragmentos de código y sobreviven a las actualizaciones.

Abrir los enlaces de los títulos de producto en la misma pestaña

El enlace del título toma su destino del filtro woot_link_target_type. Devuelve _self y los títulos se abrirán en la misma pestaña en todas las tablas, incluidos la ventana emergente del carrito y [woot_cart]:

/*
 * Products tables: open product title links in the same tab.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('woot_link_target_type', function ($target) {
    return '_self';
});

El nuevo destino se escribe en las filas cuando el servidor las construye, así que recarga la página sin usar la caché del navegador (o vacía la caché de páginas) antes de probar. Las filas de variaciones de la ventana emergente de variaciones muestran el título como texto plano, por lo que allí no hay ningún enlace que cambiar.

Miniaturas y botones de carrito y de finalizar compra: un pequeño script

Los demás destinos los escribe el código del plugin, en parte en el navegador después de dibujar la tabla o el carrito. En lugar de reescribir cada uno tras cada redibujado, el script de abajo espera un clic en un enlace dentro de una tabla de productos, de una ventana emergente de la tabla o del carrito de la tabla, y elimina target="_blank" de ese enlace justo antes de que el navegador lo siga. Funciona con las filas cargadas más tarde por paginación, ordenación, filtrado o cargar más (load more), y con las ventanas emergentes abiertas en cualquier momento.

/*
 * Products tables: open links from tables, table popups and the table cart
 * in the same tab. Add it to the footer of the site: a JavaScript snippet in
 * a code snippets plugin, or the footer scripts field of your theme.
 */
document.addEventListener('click', function (e) {
    var link = e.target.closest('a[target="_blank"]');

    if (link && link.closest('.woot-data-table, .woot-dynamic-popup-wrapper, .woot-woocommerce-cart, .woot-cart-shortcode')) {
        link.removeAttribute('target');
    }
}, true);

Algunas notas sobre este script:

  • Escucha en la fase de captura (el true del final), por lo que se ejecuta antes de que el clic llegue al enlace y el navegador abre el enlace con el destino ya eliminado.
  • Ctrl+clic, Cmd+clic y el botón central del ratón siguen abriendo una pestaña nueva cuando el cliente lo desea.
  • También afecta al botón de los productos externos. Para mantener los enlaces de afiliado en una pestaña nueva, cambia el primer selector por 'a[target="_blank"]:not(.woot-add-to-cart-btn)'.
  • Si lo usas, no necesitas el filtro PHP anterior, aunque mantener ambos no hace ningún daño.

Si solo quieres quitar los botones del carrito en lugar de cambiarlos, la pestaña Ajustes (Settings) de WOOT tiene Ocultar el botón de carrito de la tienda (Hide shop cart button) y Ocultar el botón de finalizar compra (Hide checkout button), que eliminan Carrito de la tienda (Shop cart) y Finalizar compra (Checkout) del panel del carrito de la tabla y de su ventana emergente.

Desactivar en su lugar los enlaces de producto de la tabla

A veces la tabla es toda la experiencia de compra y no se debe poder llegar desde ella a las páginas de producto. Los títulos, las miniaturas y los términos pueden mostrarse sin enlaces. Qué control se aplica depende de si la tabla es una tabla guardada ([woot id=...]) o una tabla sin ID, como un simple [woot], la ventana emergente del carrito o [woot_cart].

En una tabla guardada

  • Título: abre la tabla, ve a la pestaña Columnas (Columns), haz clic en el botón editar (edit) (el lápiz) de la columna Título y activa Mostrar como texto (Display as text).
  • Miniatura: en la misma ventana emergente de la columna Miniatura, activa Sin enlace (No Link).
  • Categorías, etiquetas, atributos: cada columna de taxonomía tiene su propio interruptor Mostrar como texto (Display as text).
  • Por página: los atributos de shortcode post_title_as_text=1 y disable_link_on_thumb=1 hacen lo mismo para una ubicación de la tabla y tienen prioridad sobre los ajustes de las columnas.

En la ventana emergente del carrito, [woot_cart] y las tablas sin ID

Estas tablas no tienen ajustes de columnas, así que las controlan dos filtros. woot_disable_all_links_on_titles convierte los títulos en texto y woot_disable_all_links_on_thumbs elimina el enlace de la miniatura:

/*
 * Products tables: no product links in the cart popup, [woot_cart]
 * and tables without an ID. Child theme functions.php or a code snippets plugin.
 */
add_filter('woot_disable_all_links_on_titles', '__return_true');
add_filter('woot_disable_all_links_on_thumbs', '__return_true');

El filtro de miniaturas también establece el valor predeterminado de las tablas guardadas: se aplica a toda tabla cuya columna Miniatura nunca ha cambiado su interruptor Sin enlace (No Link). Una vez guardado ese interruptor, activado o desactivado, prevalece el ajuste de la columna. El filtro de títulos no afecta en absoluto a las tablas guardadas; allí usa Mostrar como texto (Display as text). Esta es también la respuesta limpia para los enlaces de producto de la ventana emergente del carrito, a los que no llegan los interruptores de las columnas: no hace falta ninguna solución con CSS y pointer-events.

Comprobar el resultado

  • Vacía la caché de páginas y recarga la página de la tabla en una ventana privada.
  • Haz clic derecho en un título, elige Inspeccionar (Inspect) y mira el enlace: tras el filtro PHP muestra target="_self".
  • Haz clic en una miniatura, en un enlace de categoría y, en la ventana emergente del carrito, en Carrito de la tienda (Shop cart) y Finalizar compra (Checkout): cada uno debe abrirse en la misma pestaña cuando el script está activo.
  • Si un enlace sigue abriéndose en una pestaña nueva, consulta el código fuente de la página y comprueba que el script está en la página de la tabla (los plugins de fragmentos pueden limitar un fragmento a algunas páginas); después busca errores en la pestaña Consola (Console) de las herramientas de desarrollo.

La página del shortcode [woot_cart] describe con más detalle el carrito de la tabla. Si un enlace de tu tabla sigue ignorando estos ajustes, pregunta en el foro de soporte de WOOT e indícanos de qué columna o botón se trata.