我想你可以把这件事做得比你简单得多。只需创建my-projects
翻页并忘记自定义重写。为什么?因为用户只需要查看自己的项目。不需要重写,因为你可以get the current user any time.
将项目渲染嵌入到一个短代码中,然后将其弹出到您想要的任何页面中。
add_action(\'init\', \'wpse105306_add_shortcode\');
function wpse105306_add_shortcode()
{
add_shortcode(\'wpse105306_projects\', \'wpse105306_projects\');
}
function wpse105306_projects()
{
$user = wp_get_current_user();
$projects = wpse105306_get_projects_somehow($user);
// do stuff with $projects
}
function wpse105306_get_projects_somehow($user)
{
// whatever you need here
}
也就是说,如果你真的想要那个url,你需要做一个
custom rewrite.
// make the rewrite work
add_action(\'init\', \'wpse105306_add_rewrite\');
function wpse105306_add_rewrite()
{
add_rewrite_rule(
\'^client-portal/my-projects/([^/]+)/?$\',
\'index.php?wpse105306_portal=$matches[1]\',
\'top\'
);
}
// make sure WordPress doesn\'t eat the wpse105306_portal query var
add_filter(\'query_vars\', \'wpse105306_add_var\');
function wpse105306_add_var($vars)
{
$vars[] = \'wpse105306_portal\';
return $vars
}
然后很晚才去某个地方(例如。
template_redirect
) 如果您有门户的查询变量,请呈现客户项目。
add_action(\'template_redirect\', \'wpse105306_catch_portal\');
function wpse105306_catch_portal()
{
$username = get_query_var(\'wpse105306_portal\');
if (!$username) {
return; // things go on as normal
}
$projects = wpse105306_get_projects_somehow($username);
// do stuff with $projects
}
function wpse105306_get_projects_somehow($username)
{
// whatever you need here
}
您还可以使用
add_rewrite_tag
. 自定义重写意味着您必须执行一些其他操作才能在菜单中正常工作。上面的短代码方法意味着您可以正常使用菜单系统。