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 )
);
}