2015-04-04 29 views
3

此问题是基于Wordpress Development中未回答的问题,但尚未得到明确的答案。WordPress的URL路由,具有不同模板的多个固定链接

我有一个列出酒店的wordpress网站。单个酒店的URL看起来像:

/hotels/the-marriot-hotel

我也有位置的自定义分类,这让我浏览在不同地点的酒店,工作正常,网址是这样的:

/Locations/Liverpool

对于URL的/hotels/*我想使用自定义模板,我已经完成并且工作正常。

的问题

我也希望能够钻到的位置分类法建立一个面包屑型网址,并使用不同的模板为酒店页面。

例如,如果用户浏览/Locations/Liverpool并点击万豪酒店我想它通过点击/Locations/Liverpool/the-marriot-hotel,而不是/hotels/the-marriot-hotel,还可以使用一个稍微不同的模板,也可以加载不同的侧边栏,并建议在其他酒店在URL中的位置slug特定的区域

所以基本上我想要两条路线到单个帖子和根据使用的路线使用不同的模板。

我该如何去实施这个?

我试过了什么?

我已经尝试添加一个新页面,并使用重写规则指向它是位置酒店页面。

我试过在/位置/ {location-slug}网址的末尾添加一个slu and,并在页面模板中阅读此内容,并加载酒店帖子而不是列表,但它似乎不工作但也感觉像一个可怕的黑客无论如何

我有一个想法是添加一个重写酒店/ {slug}网页和使用代码来检测使用的网址和动态切换模板,但我不知道这是最好的办法

回答

0

我已经设法使用上述第二种方法得到这个工作(添加重写到位置着陆页和检查query_var)。

我会发布下面我使用的代码,但虽然这个工作,似乎工作得很好,它不觉得像这样做的最好方式。如果有人知道这样做的更好方法,请发布答案。我使用online post作为参考。

注意:列表页面显示侧边栏中分类法中的酒店列表,并显示主要内容区域中当前选定的或随机的酒店。这将解释我如何使用下面的循环。

function prefix_locations_rewrite_rule() { 
    add_rewrite_rule('Locations/([^/]+)/([^/]+)', 'index.php?locations=$matches[1]&hotel=$matches[2]', 'top'); 
} 

function prefix_register_query_var($vars) { 
    $vars[] = 'hotel'; 

    return $vars; 
} 

function prefix_url_rewrite_templates() { 

    if (get_query_var('hotel') && is_singular('hotel')) { 
     add_filter('template_include', function() { 
      return get_template_directory() . '/taxonomy-locations.php'; 
     }); 
    } 
} 

add_action('template_redirect', 'prefix_url_rewrite_templates'); 
add_filter('query_vars', 'prefix_register_query_var'); 
add_action('init', 'prefix_locations_rewrite_rule'); 

在我对酒店的模板文件,登陆页面:

$hotelSlug = get_query_var('hotel', false); 

if (have_posts()) { 
    while (have_posts()) : the_post(); 

     if ($post->post_name == $hotelSlug) { 
      break; 
     } 

    endwhile; 
} 

这段代码将遍历职位,如果酒店塞查询VAR匹配它会破坏那里,以便在当前帖子是我们想要的。

我们可以在这里使用一个查询,但因为我已经有一个分类中的帖子列表,我想我只是重复它。在此下方,我查看是否选择了特定的酒店,否则我会从列表中随机选择一个酒店。

我仍然要为此代码添加额外的逻辑和错误处理,我希望它可以帮助有类似问题的人