如何将作者URL查询重定向到WordPress中的buddypress用户个人资料页面

问题描述:

我使用的是Buddypress和一个名为Teambooking的插件。 Teambooking插件不知道Buddypress的存在,它使用默认的Wordpress作者查询字符串(/?author =“id”,其中id是用户ID号)创建并显示作者页面的链接。 但Buddypress为用户提供了个人资料页面。 所以,当有人点击标准作者页面链接(/?author =“id”)并将页面重定向到Buddypress用户配置文件页面时,我希望能够抓住它。我以为我可以使用钩子'template-redirect'来捕获这个事件,但这不起作用,因为钩子只有在目标页面被加载时才会触发,并且发生的事情是Wordpress会自动重定向URL它的/?author =“id”查询字符串到index.php页面,因为没有author.php页面。如何将作者URL查询重定向到WordPress中的buddypress用户个人资料页面

我无法使用$ _SERVER [“QUERY_STRING”]来解析URL,因为正如我所说的,Wordpress会自动重定向到index.php,并删除查询字符串。

我也在想我可以创建一个author.php页面,以便WordPress停止重定向到index.php,然后使用'template_redirect'钩子将author.php重定向到buddypress配置文件页面,但是那样做也不行。我在我的主题目录中创建了author.php,但Wordpress继续重定向到index.php。

关于如何从/?author =“id”查询重定向到用户的正确buddypress配置文件页的任何想法?

这种情况一定会发生在不知道Buddypress被安装的插件上。

感谢

-Malena

BuddyPress的不使用默认的固定链接结构的工作,所以它可能不是你要找的作者ID。如果您的永久链接结构设置为邮政名称例如,那么这将工作。

/* Redirect author page to buddypress page */ 
function my_page_template_redirect() 
{ 
    if(is_author()) 
    { 

     global $wp_query; 
     $user = get_user_by('slug', $wp_query->query['author_name']); 
     $url = bp_core_get_user_domain($user->ID); 
     wp_redirect($url); 
     exit(); 
    } 
} 
add_action('template_redirect', 'my_page_template_redirect'); 
+0

罗布您好,感谢您的回答,我曾试图使用也Is_author()之前,但没有工作,但它是因为另一个插件Yoast SEO干扰并将作者页面(/?author = id)的查询重定向到index.php。请参阅下面的答案。一旦我停用Yoast SEO,那么事情与is_author()一起工作。尽管我使用了代码的修改版本来派生用户标识,因为URL没有一个slug,而是一个查询字符串(?author = id),我必须解析它。 – malena

事实证明,Yoast SEO插件的免费版本被重定向的页面的作者(?笔者= ID)查询,自动的index.php,而我却没有意识到这一点。所以我必须停用Yoast SEO插件,然后使用is_author()来检测模板重定向挂钩中的作者归档页面何时被请求(URL中的?author = id查询字符串),以便将调用重定向到适当的BuddyPress用户配置文件。下面是我在functions.php中使用的代码,它执行重定向:

/* Redirect author page to BuddyPress page */ 
function my_page_template_redirect() 
{ 
/** Detect if author archive is being requested and redirect to bp user profile page */ 
if(is_author()) 
{  
    global $wp_query; 
    if(isset($wp_query->query_vars['author'])) { 
     $userID = urldecode($wp_query->query_vars['author']); 
    } 
    $url = bp_core_get_user_domain($userID); 

    wp_redirect($url); 
    exit(); 
} 
add_action('template_redirect', 'my_page_template_redirect');