问题描述
我想创建一个公共的 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。