返回

如何使用 add_rewrite_rule() 自定义 WooCommerce 产品永久链接

php

使用 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. 我应该在什么时候使用自定义永久链接?
当您希望产品永久链接更具性、更易于理解或更符合您的网站结构时,可以使用自定义永久链接。