基于用户名或用户ID的菜单链接重定向

时间:2013-07-04 作者:Casey

我正在构建一个客户端门户,我的客户端可以在其中登录并查看其所有待定项目、已完成项目和创建新项目。

虽然我一开始就被困住了。

下拉菜单称为“我的项目”
如果“用户1”已登录,他们单击“我的项目”,则我需要该链接来链接:
mysite.com/client-portal/my-projects/(USERID or USERNAME)/

这将是他们的专用页面,因此如果用户1的用户名为johndoe 链接将是my-projects/johndoe/

如果用户2(janedoe)已登录。当他们单击“我的项目”时,他们将被执行my-projects/janedoe/ 等等,第四。

所以基本上我需要一个%username% permalink我可以放入一个自定义菜单链接,该链接将更改%username% 使用当前登录用户的用户名。

这能做到吗?

2 个回复
SO网友:chrisguitarguy

我想你可以把这件事做得比你简单得多。只需创建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. 自定义重写意味着您必须执行一些其他操作才能在菜单中正常工作。上面的短代码方法意味着您可以正常使用菜单系统。

SO网友:richbai90

WordPress具有获取当前用户的内置功能:

<?php wp_get_current_user(); ?>
然后,我的方法是创建一个变量,例如:

<?php $userid = wp_get_current_user(); ?>
然后在HTML中执行以下操作<a href =userportal?<?php echo $userid ?> >menu <\\a>

然后,只需使用php GET变量从url获取用户id,就可以使用该id获取用户所需的任何详细信息。

这样,就不用为每个用户创建一个新页面了,您可以使用AJAX并根据用户的ID请求任何用户的公文包。从长远来看,这样做更容易,也更具可扩展性。

结束