本文介绍如何解决ACF自定义产品固定链接中没有分类的问题,目前使用ACF(Advanced Custom Fields)创建的自定义内容类型默认是不注册分类的固定链接的,WordPress设置中的固定链接修改也对其无效,这样当我们创建产品和产品分类的时候,产品页面的固定链接中就不包含产品分类的信息。
下面这张截图是我使用ACF自定义的产品和产品分类,在产品页面的URL结构中,可以发现没有分类信息。
如何解决ACF自定义产品固定链接中没有分类信息?
目前需要我们手动进行处理,过程就是添加一段PHP代码,以及修改产品内容的URL选项配置。
关于如何使用ACF自定义产品内容类型实现B2B产品管理的教程,你可以阅读我写的《ACF自定义内容类型实现B2B产品管理终极指南》
1)使用 post_type_link
过滤器
借助 post_type_link
过滤器来手动添加分类信息到固定链接。将如下代码添加到你的主题Function文件中(推荐安装子主题,这样更新主题,代码不会被覆盖),然后保存。
另外,Function文件是主题核心文件,修改之前请确保网站有备份!
add_filter('post_type_link', 'add_product_category_to_permalink', 10, 2);
function add_product_category_to_permalink($permalink, $post) {
if ($post->post_type == 'product') {
$terms = wp_get_post_terms($post->ID, 'product_category');
if (!empty($terms)) {
return str_replace('%product_category%', $terms[0]->slug, $permalink);
} else {
return str_replace('%product_category%', 'uncategorized', $permalink);
}
}
return $permalink;
}
需要注意的是,代码中的product对应的是自定义内容的Key值,如果你定义的是其他内容类型,需要根据自己创建的内容Key匹配去修改。(比如你定义的内容类型为Music,Key值为music,那么代码中的product应该替换成music)
代码中的product-category以及%product-category%中的product-category需要修改成你创建的分类法的Key值。(比如你创建的分类法Music Style,对应的Key值为 music-style,那么代码中的product-category应该替换成music-style)
Key替换一定要正确,否不生效,一个完整的例子,如果你定义的内容类型为Music,Key值为music,分类法Music Style,对应的Key值为 music-style,那么最终你要在Function文件中添加代码如下:
add_filter('post_type_link', 'add_product_category_to_permalink', 10, 2);
function add_product_category_to_permalink($permalink, $post) {
if ($post->post_type == 'music') {
$terms = wp_get_post_terms($post->ID, 'music-style');
if (!empty($terms)) {
return str_replace('%music-style%', $terms[0]->slug, $permalink);
} else {
return str_replace('%music-style%', 'uncategorized', $permalink);
}
}
return $permalink;
}
你还可以通过WP Code插件来添加这段PHP代码:
以上设置完成之后,还不能解决ACF自定义产品固定链接中没有分类的问题,我们还需要修改自定义内容类型的URL配置。
2)修改产品内容的URL设置
进入你定义的内容类型编辑中,在高级设置中,切换到URls选项卡,修改Permalink Rewrite为Custom Permalink,并在URLSulg中输入product/%product-category%(百分号中间填写分类法的Key值),修改之后保存。
以上2个步骤做完之后,如果你的网站开启了缓存,请先清理缓存。
让后刷新页面,并访问产品页面,你会发现产品页面的URL中出现了分类信息。