2015-04-04 30 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匹配它會破壞那裏,以便在當前帖子是我們想要的。

我們可以在這裏使用一個查詢,但因爲我已經有一個分類中的帖子列表,我想我只是重複它。在此下方,我查看是否選擇了特定的酒店,否則我會從列表中隨機選擇一個酒店。

我仍然要爲此代碼添加額外的邏輯和錯誤處理,我希望它可以幫助有類似問題的人