Home > Net >  How to link external products on the Shop page to the Product page in WooCommerce for specific produ
How to link external products on the Shop page to the Product page in WooCommerce for specific produ

Time:11-04

Hi Everyone.

So i have found this code shown below: (credit to https://www.tychesoftwares.com/how-to-link-external-products-on-the-shop-page-to-the-product-page-in-woocommerce/)

The quesion i need help with is how to modify this code so it only works on certain product categories, at the moment the code is applied to all products sitewide.

add_filter( 'woocommerce_loop_add_to_cart_link', 'ts_link_external_product_page', 16, 3 );
function ts_link_external_product_page( $button, $product, $args ) {
  $url = $product->add_to_cart_url();
  $button_text = $product->add_to_cart_text();
  if ( 'external' === $product->get_type() ) {
    $url = $product->get_permalink();
    $button_text = "View Details";
  }
  return sprintf( '<a href="%s" data-quantity="%s"  %s>%s</a>',
    esc_url($url),
    esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 ),
    esc_attr( isset( $args['class'] ) ? $args['class'] : 'button' ),
    isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '',
    esc_html( $button_text)
  );
}

 

I feel like i need to add a line like "if(is_product_category( array( 'catslugurl', 'anothercatslugurl' ) )){" but can not seem to be able to get it to work.

Any help with this would be great. Thank you so much :)

I feel like i need to add a line like "if(is_product_category( array( 'catslugurl', 'anothercatslugurl' ) )){" but can not seem to be able to get it to work.

CodePudding user response:

Try this:

add_filter( 'woocommerce_loop_add_to_cart_link', 'ts_link_external_product_page', 16, 3 );

function ts_link_external_product_page( $button, $product, $args ) {
    $url         = $product->add_to_cart_url();
    $button_text = $product->add_to_cart_text();
    $categories  = array( 'music', 'clothes' ); //Your specific categories 
    $product_id  = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;
    if ( has_term( $categories, 'product_cat', $product_id ) && 'external' === $product->get_type() ) {
            $url         = $product->get_permalink();
            $button_text = 'View Details';

    }
    return sprintf(
        '<a href="%s" data-quantity="%s"  %s>%s</a>',
        esc_url( $url ),
        esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 ),
        esc_attr( isset( $args['class'] ) ? $args['class'] : 'button' ),
        isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '',
        esc_html( $button_text )
    );
}
  • Related