Wordpress CPT URL重写

时间:2015-03-11 12:58:28

标签: php wordpress rewrite permalinks

我试图重建我的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);

有人知道我做错了什么? 感谢

1 个答案:

答案 0 :(得分:1)

线条,收藏品,产品......它们都是产品。使用有组织的分类法创建一个帖子类型,并为查询相应产品的行/集合创建页面。