如何在WooCommerce中重写产品固定链接以使用类别插件

时间:2019-05-29 作者:stckvrw

我知道这里有一个关于这个问题的信息,但我没有找到完全可行的解决方案。

我需要在我的产品permalinks中使用产品类别Slug,因此链接如下example.com/laptops/some-laptop

我在我的永久链接设置中选择了自定义基选项,键入/%product-cat%/ 在字段中保存。接下来,我在我的主题中添加了以下代码functions.php

add_filter(\'post_type_link\', \'category_slug_in_product_permalink\', 10, 2);
function category_slug_in_product_permalink($permalink, $post) {

    if($post->post_type == \'product\') { 
        $categories = wp_get_object_terms($post->ID, \'product_cat\');
        $permalink = str_replace(\'%product-cat%\', $categories[0]->slug, $permalink);
    }
    return $permalink;
}
代码运行良好,我看到产品permalinks现在完全符合需要。

但当我点击任何一个链接时,我收到了400个错误请求错误。当我通过链接阅读时wordpress.stackexchange.com/a/334902 这个post_type_link filter只更改URL,但“它不会更改任何重写规则,永久链接的结构仍然相同”。

那么,我如何解决这个问题的后半部分呢?

我发现有人提到$GLOBALS[\'wp_rewrite\'], \'slug\' => \'%...%\', \'with_front\' => false 等等,但我没有找到完全可行的解决方案,或者我只是不知道如何使用现有的解决方案

2 个回复
最合适的回答,由SO网友:stckvrw 整理而成

第二个代码是:

function custom_rewrite_basic() {

    $prodCatArgs = [\'taxonomy\' => \'product_cat\'];
    $wooCats = get_categories($prodCatArgs);
    $catSlugs = [];
    foreach($wooCats as $wooCat) {
        $catSlugs[] = $wooCat->slug;
    }
    add_rewrite_rule(
        \'^(\'.implode(\'|\', $catSlugs).\')/([^/]*)/?\',
        \'index.php?post_type=product&category=$matches[1]&product=$matches[2]\',
        \'top\'
    );
    flush_rewrite_rules();
}
add_action(\'init\', \'custom_rewrite_basic\');

SO网友:Maciej Bis

或者,您可以使用我的插件,直接从Wordpress管理面板调整产品永久链接。

首先,您需要从Wordpress插件目录安装Permalink Manager LiteTools -> Permalink Manager -> Permastructures“管理页面并向下滚动到“产品”。

  • 现在,您应该将默认的永久链接格式替换为:%product\\u cat%/%product%
  • 新的永久结构设置将仅应用于新产品,但如果需要,您可以在“工具->永久链接管理器->工具->重新生成/重置”中重新生成旧产品永久链接“部分。
  • 您可以在此处找到完整的说明:https://permalinkmanager.pro/docs/tutorials/taxonomy-slugs-in-custom-post-type-permalinks/

    相关推荐

    Problem with permalinks

    我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。