2017-07-25 70 views
0

我使用的是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

回答

0

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

1

事實證明,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'); 
相關問題