2010-09-02 98 views
0

如何刪除WordPress網站上的作者前綴,我做了一個快速Google,但只發現了我不想訴諸的htaccess重定向。刪除WordPress上的作者前綴

爲了澄清我希望把這個:

http://www.domain.com/author/cameron/

這個

http://www.domain.com/cameron/

我不希望使用任何形式的重定向,但實際的PHP代碼我可以在functions.php文件中使用,因爲我希望網站中的所有鏈接都使用作者的內容自動更新,而不必保留原始鏈接,然後重定向到新鏈接。

感謝

+1

我不會推薦! '/ author /'標籤用於命名空間作者。刪除它會混淆WordPress,如果你有一個名爲'cameron'的頁面,因爲默認情況下頁面會自動用於永久鏈接。 – EAMann 2010-09-02 18:44:05

+0

與刪除'/ category /'前綴無異。我的客戶已經要求這樣做,因爲他們希望這些網址能夠匹配目前與此類似的文章。domain.com/cameron/2010/post-title /' 您是否知道如何刪除作者前綴?謝謝。 – Cameron 2010-09-02 19:14:47

+0

'WP No Category Base'插件(http://wordpress.org/extend/plugins/wp-no-category-base/)源代碼應該給你一個很好的起點。基本的想法是添加WP重寫規則,該規則匹配每個作者的名字。 – 2010-09-02 20:48:33

回答

8

你基本上需要添加WP重寫規則所需形式每個用戶的名稱相匹配。這是WP No Category Base對類別所做的,因此我的答案中的大部分代碼都是從該插件改編而來的。

該插件的主要部分是掛鉤到author_rewrite_rules篩選器並替換作者重寫規則的函數。這將檢索所有用戶名並專門爲每個用戶添加一個重寫規則(下面不會處理提要,所以如果需要的話,請查看WP No Category Base源代碼)。

add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules'); 
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb; 
    $author_rewrite = array(); 
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");  
    foreach($authors as $author) { 
     $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]'; 
     $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]'; 
    } 
    return $author_rewrite; 
} 

插件的另一關鍵部分是其掛鉤插入author_link濾波器,並從返回的URL的「作者」基礎的功能。

add_filter('author_link', 'no_author_base', 1000, 2); 
function no_author_base($link, $author_id) { 
    $link_base = trailingslashit(get_option('home')); 
    $link = preg_replace("|^{$link_base}author/|", '', $link); 
    return $link_base . $link; 
} 

看到這個要點:http://gist.github.com/564465

這不會從舊風格筆者的URL重定向處理,再次看到WP無類別基本來源,如果你需要做的。

+0

謝謝@Cameron,我用這個代碼,它非常完美! :) – Hopelessone 2016-07-10 10:02:31

1

,一定要將這段代碼裏面no_author_base_rewrite_rules():

foreach($authors as $author) { 
    $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]'; 
    $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]'; 

    $rules = get_option('rewrite_rules'); 
    if (! isset($rules['({$author->nicename})/?$'])) { 
    global $wp_rewrite; 
     $wp_rewrite->flush_rules(); 
    } 
} 

使WordPress的刷新重寫名單。 (否則某些鏈接可能無法正常工作)。