返回
如何使用 add_rewrite_rule() 自定义 WooCommerce 产品永久链接
php
2024-03-22 20:17:15
使用 add_rewrite_rule() 自定义 WooCommerce 产品永久链接
问题
WooCommerce 中产品的默认永久链接结构为 my-website.com/shop/product/product_name-sku
。如果希望自定义该结构,例如将其更改为 my-website.com/shop/parent-cat/child-cat/product_name-sku
,该怎么做?
解决方案
使用 add_rewrite_rule() 函数可以实现上述目标。该函数允许您添加自定義重写规则来修改 WordPress 永久链接的结构。以下是如何使用它自定义 WooCommerce 产品永久链接:
1. 添加永久链接过滤器
add_filter('post_type_link', 'custom_product_permalink', 1, 2);
function custom_product_permalink($link, $post) {
// 仅修改产品类型的永久链接
if ($post->post_type == 'product') {
// 获取父类别和子类别
$parent_cat = get_term_by('id', $post->parent, 'product_cat');
$child_cat = get_term_by('id', $post->term_id, 'product_cat');
// 构建新永久链接
$new_link = home_url('shop/' . $parent_cat->slug . '/' . $child_cat->slug . '/' . $post->post_name . '-' . get_post_meta($post->ID, '_sku', true) . '/');
// 转换为小写
return strtolower($new_link);
} else {
return $link;
}
}
2. 添加重写规则
add_action('init', 'custom_product_permalink_rewrite_rules');
function custom_product_permalink_rewrite_rules() {
// 匹配新永久链接结构
add_rewrite_rule(
'shop/([^/]+)/([^/]+)/([^/]+)-([^/]+)/?】
请根据上面【】里的内容总结成一篇文章。作为一位经验丰富的程序员和技术作家,您需要撰写一篇100%原创、SEO优化的博客文章,用来记录问题,解决问题的方法,或者相关的内容分享。文章应包含标题和子标题,并围绕提供的主题展开。请用自己的话来写作,确保内容的原创性和独特性。在写作时,请注意文章的复杂性和连贯性,确保内容既深入又具有相关性。文章应使用详尽的段落来吸引读者,并采用对话式的写作风格。这包括使用非正式的语气,运用第一人称和第二人称代词,保持语言简洁有力,使用主动语态,以及适当运用修辞问题、比喻和隐喻。文章最后应以结论段落和5个常见问题解答结束。请加粗文章的标题和所有子标题,并为H标签使用适当的格式。
其他写作要求:
1.文章字数应在2000-4000字之间。
2.确保内容的原创性,避免抄袭或引用他人的作品。
3.使用自然、地道的语言风格,表达观点和情感。
4.保持文章的逻辑性和一致性,避免矛盾或不准确的信息。
5.避免内容的重复和无关性,确保语言的多样性和相关性。
6.在全面性和创造性之间取得平衡,提供有用且有趣的细节和例子,但不要过度夸张或虚构。
7.定义文章的目标读者,是专业人士、业余爱好者还是普通大众?这将指导文章的语言风格和深度。
8.鼓励使用真实世界的例子和案例来举例说明,使文章更加生动和有说服力。
9.需要包含相关的图表、代码片段或视觉元素来丰富文章内容。
10.以专业,客观,解决问题的方式来写文章,不要过分表达感情,着重用来解决问题。
11.不要使用ai管用的写作手法,避免“前言”,“引言”,“首先”,“接下来”,“最后”, “在xxx领域”, “结论”, “结语”,“总结”,“本文”,“深入”,“讨论”,等等ai写作常出现的词语,
'index.php?post_type=product&parent_cat=$matches[1]&child_cat=$matches[2]&name=$matches[3]&sku=$matches[4]',
'top'
);
flush_rewrite_rules();
}
通过添加此代码,您将创建一个新规则,将新永久链接结构映射到正确的查询参数。
代码说明
post_type_link
过滤器用于拦截产品类型的永久链接。get_term_by()
函数用于获取产品所属的父类别和子类别。- 重写规则使用正则表达式匹配新永久链接结构,并将其重写为适当的查询参数。
flush_rewrite_rules()
函数刷新 WordPress 的重写规则。
提示
- 确保已启用 WooCommerce 产品类别。
- 刷新永久链接以应用更改。
常见问题解答
1. 为什么我需要自定义 WooCommerce 产品永久链接?
自定义永久链接可以改善 SEO 和用户体验,使其更易于浏览和共享产品。
2. 我可以自定义父类别或子类别的一部分吗?
是的,您可以在重写规则的正则表达式中修改 ([^/]+)
部分。
3. 我可以添加其他参数到永久链接中吗?
是的,您可以在重写规则的查询参数中添加其他参数。
4. 我的自定义永久链接不起作用。该怎么办?
检查您的代码是否存在语法错误或拼写错误。您还可以使用调试工具来检查您的重写规则是否匹配预期。
5. 我应该在什么时候使用自定义永久链接?
当您希望产品永久链接更具性、更易于理解或更符合您的网站结构时,可以使用自定义永久链接。