2013-09-10 105 views
0

我目前正在開發一個具有不同尋常的分類標準的WordPress網站。爲了解決某些問題,我需要在URL的末尾添加一個參數。我有這個工作,但是我需要一些使用mod_rewrite使參數漂亮的方式。Wordpress - 額外的'漂亮'參數的URL字符串。 mod_rewrite的?

這是我目前有...

www.site.com/('director-name」或 '項目名')/?路徑=( '視覺' 或 '生產')

例如:www.site.com/joe-smith/?path=visual

我使用$ _GET訪問此變量我的功能,並能正常工作。問題是我想要的網址閱讀...

www.site.com/joe-smith/visual OR www.site.com/art/production

我已經閱讀了該搞亂WordPress中的.htaccess並不是解決這個問題的最好方法。

幫助將不勝感激。 謝謝!

+0

爲什麼不使用自定義規則內置的[Permalink](http://codex.wordpress.org/Using_Permalinks#Choosing_your_permalink_structure)功能? – UIlrvnd

+0

這不提供正確的功能。 – Andre

回答

1

你不需要因爲你使用Wordpress的.htaccess與mod_rewrite的或做任何事情。 WordPress的內置系統來處理重寫規則。您也可以在功能中正確設置您的URL參數。該函數是add_rewrite_rule(),代碼中的示例非常好。不過,我可以引導你通過它,所以你可以看到究竟發生了什麼。

採取以下重寫規則從例如:

add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?page_id=12&food=$matches[1]&variety=$matches[2]','top'); 

首先,讓我們去了函數的參數。第一個參數是用於重寫的regex。如果此正則表達式在當前URL上找到匹配項,則重寫將啓動。任何URL參數都將加載到$matches數組中,稍後在該函數的第二個參數中使用。

第二個參數是將被重寫的實際URL。請注意,page_id在這裏被使用,而不是頁面中斷。重要的是你使用這個參數的頁面ID而不是slug,因爲slug本身是一個重寫。後面的參數是您傳遞給處理程序的查詢字符串的值。

正如你可能知道,在WordPress的所有頁面都通過index.php文件傳送。如果你對MVC很熟悉,這很像前端控制器。因此,您所有的重寫應該在開頭包含index.php文件。這反映在這個函數的第二個參數中。您可以使用其他文件進行自定義重寫,但爲簡單起見,假設您使用的是標準Wordpress index.php文件。

最後一個參數是,所述重寫應放置在隊列中的位置。您可以使用「頂部」或「底部」。在WordPress重寫之前加載頂部,底部之後加載。

使用此功能,WordPress會行添加到您的htaccess的即時和基於當前頁面上更新它們。這絕對是在Wordpress中重寫的最佳方式!希望這可以幫助!

更新基於評論

你會將此代碼放在您的functions.php文件。您應該將其包裝在一個函數中,並將其掛接到在重寫規則之前觸發的操作。這是符合您確切的問題的示例:

add_action('init', 'my_custom_rewrite_function'); 
function my_custom_rewrite_function() { 
    $director_category_id = 5; // Change to correct id 
    $project_category_id = 6; // Change to correct id 
    $handler_page_id = 25 // The page ID for the handler 

    add_rewrite_rule('^director/([^/]*)/([^/]*)/?','index.php?page_id=$handler_page_id&category=$director_category_id&name=$matches[1]&path=$matches[2]','top'); 
    add_rewrite_rule('^project/([^/]*)/([^/]*)/?','index.php?page_id=$handler_page_id&category=$project_category_id&name=$matches[1]&path=$matches[2]','top'); 

    flush_rewrite_rules(); // This will make sure that the rewrite rules are added 
} 

然後,您可以做您的每個查詢字符串參數的get_query_var()處理您查詢您的自定義模板。

+0

嗨馬修。將在早上嘗試第一件事。似乎它可能有用。這是否在functions.php文件中?鑑於我發佈的例子,正確的功能是什麼?我是一個正則表達式結點。 – Andre

+0

並感謝您的詳細回覆! – Andre

+0

是的,你可以把這段代碼放在你的functions.php文件中。有關更多信息,請參閱我的更新。 –