Дубли товаров woocommerce
Как исправить ситуацию с дублями товаров в wc, например товар доступен по ссылке сайт.ру/категория/товар и сайт.ру/категория/праовлоы/товар
я так понимаю нужно вместо
if( ! ( is_category() || is_tag() || is_tax() ) )
вставить
if( ! ( is_product() ) )
чтобы работало для страницы товара, но при такой конструкции происходит редирект на страницу сайт.ру/?taxonomy=&term=
либо же нужно чтобы при таком урле сайт.ру/категория/праовлоы/товар была 404
Там пример с таксономиями, у тебя с записями (вообще странно, вп записи автоматом редиректит на правильный УРЛ, у тебя там наверное чудо-плагин какой нить по изменению ЧПУ). Т.е. тебе нужно переделать код под посты, нужно заюзать get_permalink() вместо get_term_link(). Ну и проверку поменять как ты сказал на is_product():
add_action( 'template_redirect', 'check_301redirect_product_url', 9 ); function check_301redirect_product_url(){ if( ! is_product() ) return; $qo = get_queried_object(); $post_url = get_permalink( $qo ); $parsed_url = parse_url( $_SERVER['REQUEST_URI'] ); if( strpos( $parsed_url['path'], wp_make_link_relative( $post_url ) ) === false ){ $redirect_to = isset( $parsed_url['query'] ) ? "$post_url?{$parsed_url['query']}" : $post_url; wp_redirect( $redirect_to, 301 ); exit; } }
подскажите пожалуйста, для категории товаров woocommerce сделал так, но страницы категорий перестают работать
add_action( 'template_redirect', 'check_301redirect_tax_url', 9 ); function check_301redirect_tax_url(){ if( ! is_product_category() ) return; $qo = get_queried_object(); $term_url = get_category_link( $qo ); $parsed_url = parse_url( $_SERVER['REQUEST_URI'] ); if( strpos( $parsed_url['path'], wp_make_link_relative( $term_url ) ) === false ){ $redirect_to = isset( $parsed_url['query'] ) ? "$term_url?{$parsed_url['query']}" : $term_url; wp_redirect( $redirect_to, 301 ); exit; } }
https://wp-kama.ru/question/rubriki-dostupny-po-raznym-url-adresam