問題描述
我想創建一個公共的 front-end 個人資料頁面與友好的網址像這樣的格式。
mysite.com/user/someusername
任何想法如何才能實現這一點?我知道它與重寫規則有關,但我不知道如何做到這一點。如果你有任何關於我的鏈接或教程,那將是偉大的。
謝謝!
最佳解決方案
有兩種方法我發現這樣做:
-
作者頁面具有自定義重寫規則
-
與重寫規則配對的自定義模板文件
第一個更簡單的實現,但可能無法在所有情況下工作 (其中一個我將很快描述) 。
自定義重寫規則
前幾天我發現這個解決方案:URL Rewriting
這裏的代碼,有評論:
// Define the author levels you want to use
$custom_author_levels = array( 'user', 'leader' );
// On init, add a new author_level rewrite tag and add it to the author_base property of wp_rewrite
add_action( 'init', 'wpleet_init' );
function wpleet_init()
{
global $wp_rewrite;
$author_levels = $GLOBALS['custom_author_levels'];
// Define the tag and use it in the rewrite rule
add_rewrite_tag( '%author_level%', '(' . implode( '|', $author_levels ) . ')' );
$wp_rewrite->author_base = '%author_level%';
}
// The previous function creates extra author_name rewrite rules that are unnecessary.
//This function tests for and removes them
add_filter( 'author_rewrite_rules', 'wpleet_author_rewrite_rules' );
function wpleet_author_rewrite_rules( $author_rewrite_rules )
{
foreach ( $author_rewrite_rules as $pattern => $substitution ) {
if ( FALSE === strpos( $substitution, 'author_name' ) ) {
unset( $author_rewrite_rules[$pattern] );
}
}
return $author_rewrite_rules;
}
然後,您可以使用內置的 author.php 模板,修改為您的內容。
真誠地,檢查上面列出的鏈接,因為 Jan Fabry 做了很好的工作來解釋一切。
查詢 Vars 和頁面模板
對於我正在發現這些解決方案的主題,我需要根據用户元值 (單獨的 ID) 提供自定義頁面。我的客户端不希望公開地顯示用户名或用户標識,所以我們創建了一個單獨的圖層。
唯一的問題?目前,還沒有一個清晰的方法如何使用 Rewrite API 來查詢元鍵/值。幸運的是,有一個解決方案。
在你的 functions.php 文件…
// Create the query var so that WP catches your custom /user/username url
add_filter( 'query_vars', 'wpleet_rewrite_add_var' );
function wpleet_rewrite_add_var( $vars )
{
$vars[] = 'user';
return $vars;
}
然後,您需要創建一個新的重寫標記和規則,以便它知道何時以及如何處理新的查詢 var 。
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
一旦你這樣做,你只需要”catch” 當查詢 var 被提供,然後重定向到您選擇的模板:
add_action( 'template_redirect', 'wpleet_rewrite_catch' );
function wpleet_rewrite_catch()
{
global $wp_query;
if ( array_key_exists( 'user', $wp_query->query_vars ) ) {
include (TEMPLATEPATH . '/user-profile.php');
exit;
}
}
只要確保你已經創建了 user-profile.php 。
在我自己的例子中,我通過 $ wpdb-> usermeta 表創建了一個與 「public User ID」 匹配的第三個函數,並將其傳遞給模板。
如果您需要創建與其餘主題不同的模板,請記住使用 get_header 可以指定一個名稱:
get_header( 'user' );
這將調用 header-user.php 文件。
Conclusion
這兩個都是有效的工作解決方案。第二個提供單獨的”security” 層,因為它不會顯示用户 ID 或用户名,如果其他人可以瀏覽配置文件。
希望有幫助,讓我知道如果你有任何問題。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。