我试图重建我的WordPress网站的网址,但没有成功。
我有3种自定义帖子类型,行,集合和产品。 这个想法是它们通过层次结构(一对多)链接:线条,集合,产品
所以,如果我有一个名为L的行,一个名为C的集合和一个产品P,我想像这样访问:
A行应该像site.com/l
Col A应该像site.com/l/c
产品A应该像site.com/l/c/p
我已编写此代码,但无法正常使用。
按照重写规则的顺序,所有3个网址都返回A行。
但是,如果我颠倒了订单并编写了重写规则,将产品放在第一位,将集合作为第二条,将第三行作为第三条规则,则行为会发生变化。
通过反转,网址site.com/l返回A行,网址http://ll/c和site.com/l/c/p返回Col A.
我不知道为什么我无法访问产品页面。
顺便说一下,我使用类型插件生成CPT和ACF插件来生成带有CPT之间关系的元字段(以及为什么我有这个功能" get_field& #34)
// BACK_END
add_filter('post_type_link', 'site_type_permalink', 10, 4);
function site_type_permalink($post_link, $post, $leavename, $sample) {
$permalink = $post_link;
if ($post->post_type == 'lines') {
$permalink = str_replace('lines/', '', $post_link);
}
if ($post->post_type == 'collections') {
global $post;
$lines = get_field('line_obj');
$title = $lines[0]->post_name;
$permalink = str_replace('collections/', $title . '/', $post_link);
}
if ($post->post_type == 'products') {
global $post;
$col = get_field('collection_obj');
$colSlug = $col[0]->post_name;
$lin = get_field('line_obj', $col->ID);
$linSlug = $lin[0]->post_name;
$permalink = str_replace('products/', $linSlug . '/' . $colSlug . '/', $post_link);
}
return $permalink;
}
// FRONT_END
function site_rewrite_rules() {
// lines
add_rewrite_rule(
'((?!blog|wp-json)[^/]*)/?',
'index.php?lines=$matches[1]',
'top'
);
// collections
add_rewrite_rule(
'((?!blog|wp-json)[^/]*)/([^/]*)/?',
'index.php?lines=$matches[1]&collections=$matches[2]',
'top'
);
// products
add_rewrite_rule(
'((?!blog|wp-json)[^/]*)/([^/]*)/([^/]*)/?',
'index.php?lines=$matches[1]&collections=$matches[2]&products=$matches[3]',
'top'
);
}
add_action('init', 'site_rewrite_rules', 10, 0);
有人知道我做错了什么? 感谢
答案 0 :(得分:1)
线条,收藏品,产品......它们都是产品。使用有组织的分类法创建一个帖子类型,并为查询相应产品的行/集合创建页面。