WooCommerce产品多分类生成重复可访问URL,如何阻止?
解决同一产品多分类生成多URL的问题
强制使用主分类生成URL
直接在主题的functions.php文件或自定义代码插件中添加以下代码,强制系统仅使用产品设置的主分类生成URL:
add_filter('post_type_link', 'force_product_main_category_permalink', 10, 2); function force_product_main_category_permalink($permalink, $post) { if ($post->post_type === 'product') { $terms = get_the_terms($post->ID, 'product_cat'); if ($terms && !is_wp_error($terms)) { // 定位产品主分类 $main_term = array_reduce($terms, function($carry, $term) use ($post) { return ($term->term_id === get_post_meta($post->ID, '_product_cat', true)) ? $term : $carry; }); if ($main_term) { // 替换固定链接中的分类占位符 $permalink = str_replace('%product_cat%', $main_term->slug, $permalink); } } } return $permalink; }
这段代码会精准识别产品的主分类,替换URL中的%product_cat%部分,确保只生成一个基于主分类的固定链接。
301重定向处理已存在的多URL
如果已经生成了多个可访问的URL,为避免SEO重复内容问题,添加以下代码实现自动重定向:
add_action('template_redirect', 'redirect_product_to_main_category'); function redirect_product_to_main_category() { if (is_product()) { global $post, $wp; $terms = get_the_terms($post->ID, 'product_cat'); if ($terms && !is_wp_error($terms)) { $main_term = array_reduce($terms, function($carry, $term) use ($post) { return ($term->term_id === get_post_meta($post->ID, '_product_cat', true)) ? $term : $carry; }); if ($main_term) { $correct_permalink = get_permalink($post->ID); $current_url = home_url(add_query_arg(array(), $wp->request) . '/'); if ($current_url !== $correct_permalink) { wp_redirect($correct_permalink, 301); exit; } } } } }
301永久重定向会引导搜索引擎和用户访问主分类对应的正确URL,消除重复内容风险。
检查WooCommerce内置设置
部分WooCommerce版本在固定链接设置中提供了「仅使用主分类」的选项,可先进入后台WooCommerce > 设置 > 高级 > 固定链接查看,若有相关选项直接勾选即可(无此选项则用上述代码方案)。
内容的提问来源于stack exchange,提问作者Tomek
相关产品推荐
相关产品推荐

