SmythSys IT Consulting

Cómo enlazar un producto de WooCommerce a otra página de tu web o externa.

Nos han pedido recientemente, que el enlace de algunos de los productos de su tienda WooCommerce, vaya directamente a una página externa.
WooCoomerce tiene algo parecido, los productos externos o de afiliados, pero para ir al enlace tienes que entrar en el producto. La idea es que al pinchar en la imagen de cualquier página donde esté listado el producto, esta te lleve al enlace externo.

Cómo enlazar productos de WooCommerce con páginas externas.

El proceso consta de dos pasos.
Lo primero es que, en nuestra solución (mencionaremos otras) creemos los productos como externos con la opción de producto de WooCommerce y pongamos ahí la url.
Nos ha parecido más sencillo y cómodo para los usuarios así.

La segunda es crear un Snippet (como siempre puedes editar functions.php de tu tema hijo también) que detecte si son productos externos y cambie la url por la personalizada.
Os dejamos este posible código:

add_filter( ‘woocommerce_loop_product_link’, ‘cambiar_permalink_prod_externo’, 99, 2 );

function cambiar_permalink_prod_externo ( $link, $product ) {
$this_product_id = $product->get_id();
if ($product->is_type( ‘external’ ))$link = $product->add_to_cart_url();
return $link;
}

Este Snippet podemos modificarlo de muchas maneras:

  • Cambiar el enlace sólo para unos artículos (ponemos como ejemplo un enlace interno):
    if( $this_product_id=== 25 ) $link= '/enlaceinterno';
    return$link;
  • Poniendo un campo personalizado en el producto, por ejemplo con ACF, y su valor como URL.

Espero que os sirva.

Mejora 2021.

Un cliente nos pidió que los enlaces externos se abrieran en una nueva pestaña. Aquí tenéis la modificación.




add_filter( 'woocommerce_loop_product_link', 'cambiar_permalink_prod_externo', 99, 2 );


function  cambiar_permalink_prod_externo ( $link, $product ) {
$this_product_id = $product->get_id();
if ($product->is_type( 'external' ))
   {$link = esc_url($product->add_to_cart_url());
    }
return $link;
} 


if ( ! function_exists( 'woocommerce_template_loop_product_link_open' ) ) {
/**
 * Insert the opening anchor tag for products in the loop.
 */
function woocommerce_template_loop_product_link_open() {
    global $product;

    $link = apply_filters( 'woocommerce_loop_product_link', get_the_permalink(), $product );

    $link_target = $product->is_type( 'external' ) ? '_blank' : '_self';

    echo '<a target="' . esc_attr( $link_target ).'" href="' . esc_url( $link ) . '" class="woocommerce-LoopProduct-link woocommerce-loop-product__link">';
}
}

4 comentarios en «Cómo enlazar un producto de WooCommerce a otra página de tu web o externa.»

  1. Lo que has puesto no resuelve que al darle a la imagen o título del artículo te lleve al enlace afiliado en vez de a la pagina del artículo, sabes una forma de hacer eso? gracias.

    Responder
  2. Lo que estoy tratando de hacer es tener un enlace para ponerlo en una página externa o para enviarlo por email para que cuando el cliente haga clic sobre ese enlacelo lleve a la página de Wordpres con Woocommerce y aliste una variedad de productos que ya están publicados en una sola página. es decir hago clic en el enlace y me lleva a una página con los productos que yo he configurado…. quizás con cada “Product:ID”….
    Gracias por cualquier ayuda 😉

    Responder
  3. Gracias por tu respuesta y ayuda… lo estaré probando. Lo que veo que siempre este tipo de cosas se puede hacer solo con productos simples y no con los variables… algo que sería un problema para mi pero veré si me sirve y coómo puedo solucionarlo…. 😉

    Responder

Deja un comentario

Resumen de nuestra Política de Privacidad

  • Responsable: SmythSys IT Consulting SLNE.
  • Finalidad: Gestionar y moderar los comentarios.
  • Legitimación: Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios: Tus datos se alojan en los servidores de OVH.
  • Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la dirección del responsable (en nuestra política de privacidad).