Wordpress中的自定义URL结构

时间:2018-01-26 12:48:33

标签: php wordpress url-rewriting

我有3种自定义帖子类型:

发展 house_type 房间 我已经使用ACF在这些自定义帖子类型之间建立了一些关系,因此开发位于顶部,并且可以在其下面有许多house_types。那么house_type下面可以有很多房间。

我想修改url结构,使其也是分层结构,以便用户可以转到/ {development},它将显示列出开发中所有house_types的单个开发页面。然后,如果他们单击一个housetype,则url将是/ {development} / {house_type},并将显示单个house_type页面,该页面将列出该house类型中的所有房间。然后,如果他们点击一个房间,则网址将为/ {development} / {house_type} / {room},并将显示包含该房间信息的单个房间页面。

我已经尝试了很多东西,但尚未成功实现这一目标。以下工作在一定程度上但不完美,因为它执行重定向。就像我去/ {development} / {house_type}一样,它会重定向到/ house-types / {house-type},这是正确的页面,但我不希望URL发生变化。此外,如果我转到/ {development} / {house_type} / {room},网址是正确的,但它会显示单个开发页面而不是单个会议室页面。

function my_rewrite_rules() {

    flush_rewrite_rules();

    add_rewrite_tag( '%development%', '([^&]+)' );
    add_rewrite_tag( '%room%', '([^&]+)' );
    add_rewrite_tag( '%house-type%', '([^&]+)' );

    add_rewrite_rule( '^%development%/%room%/([^/]*)?', 'index.php?room=$matches[1]' );
    add_rewrite_rule( '^%development%/([^/]*)?', 'index.php?house_type=$matches[1]' );
    add_rewrite_rule( '^([^/]*)/?', 'index.php?post_type=development&development=$matches[1]' );
}
add_action( 'init', 'my_rewrite_rules' );

我做错了什么?

1 个答案:

答案 0 :(得分:0)

最后用以下内容排序:

/**
* Custom rewrite rules
*/
function my_rewrite_rules() {
    add_rewrite_rule( '^([^/]*)/([^/]*)/([^/]*)?', 'index.php?post_type=room&room=$matches[3]', 'top' );
    add_rewrite_rule( '^([^/]*)/([^/]*)?', 'index.php?post_type=house_type&house_type=$matches[2]', 'top' );
    add_rewrite_rule( '^([^/]*)/?', 'index.php?post_type=development&development=$matches[1]', 'top' );
}
add_action( 'init', 'my_rewrite_rules' );