Search code examples
phpwordpresswoocommerceproductexternal

How to link external products on the Shop page to the Product page in WooCommerce for specific product categories ONLY


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" class="%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.


Solution

  • 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" class="%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 )
        );
    }