我知道这里有一个关于这个问题的信息,但我没有找到完全可行的解决方案。
我需要在我的产品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
等等,但我没有找到完全可行的解决方案,或者我只是不知道如何使用现有的解决方案
最合适的回答,由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\');