WooCommerce中,所有文章类型的URL都有唯一的前缀目录,默认为「product」,我们可以在固定链接设置中修改这个前缀为我们想要字符。但是如果想为某个产品类型设置单独的前缀,就没办法通过后台进行设置了。
如果想实现这个功能,我们需要换种思路,为某个产品类型添加一个单独的URL重写规则,然后通过 the_permalink Filter 修改这个产品类型的固定链接URL,最后再屏蔽该文章类型默认的URL,就可以实现这个功能了。
为自定义产品类型添加新的URL重写规则
这一步没什么好说的,直接使用 add_rewrite_rule 函数添加一条新的URL重写规则就可以了。添加下面的代码之后,通过 「books」这个前缀和通过默认的「product」前缀都能正确访问到每一个商品。
add_action('init', function ()
{
add_rewrite_rule(
'^books/([^/]*)/?',
'index.php?product=$matches[1]',
'top'
);
flush_rewrite_rules();
});
修改自定义产品类型的固定链接
上一步中,我们实现了自定义产品 URL 前缀,这一步,我们需要修改产品固定链接,让产品类型「books」的固定链接前缀为我们需要的字符。下面的代码中,我们在输出固定链接的时候,先判断一下产品类型,如果是「books」,我们替换URL中的 product 为 Books,否则原样返回。
add_filter('the_permalink', function ($link, $post)
{
global $product;
if ($product && $product->is_type('books')) {
$link = str_replace('/product/', '/books/', $link);
}
return $link;
}, 10, 2);
实现这个功能会导致一个产品有两个网址,如果两个网站同时出现在前端,对SEO来说,可能会出现重复内容的问题,如果是正常的在前端访问,books 类型的商品链接不会显示为默认的 prodcut 链接,除非手动粘贴默认链接在文章中,这一点稍微注意一下即可。