2010-09-02 6 views
0

Comment puis-je supprimer le préfixe de l'auteur sur un site WordPress, j'ai fait un rapide Google, mais j'ai seulement trouvé des redirections htaccess que je ne veux pas utiliser.Enlever le préfixe de l'auteur sur WordPress

Pour clarifier, je veux tourner ceci:

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

dans ce

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

Je ne veux pas utiliser de rediriger vers tout type, mais le code PHP réel I peut utiliser dans le fichier functions.php, car je veux que tous les liens à travers le site qui utilisent les trucs de l'auteur pour mettre à jour automatiquement sans y garder les liens d'origine, puis rediriger vers le nouveau.

Merci

+1

Je ne recommanderais pas ça! La balise '/ author /' est utilisée pour nommer vos auteurs. Le supprimer va confondre WordPress si jamais vous avez une page nommée 'cameron' car les pages sont automatiquement utilisées dans les permaliens par défaut. – EAMann

+0

Pas différent de supprimer le préfixe '/ category /'. Mon client a demandé cela car ils veulent que les urls correspondent aux messages qui sont actuellement comme ceci 'domain.com/cameron/2010/post-title /' Savez-vous comment supprimer le préfixe de l'auteur? Merci. – Cameron

+0

Le code source du plugin 'WP No Category Base' (http://wordpress.org/extend/plugins/wp-no-category-base/) devrait vous donner un bon point de départ. L'idée de base est d'ajouter des règles de réécriture WP qui correspondent aux noms de chacun de vos auteurs. –

Répondre

8

Vous devez essentiellement d'ajouter des règles de réécriture de WP pour faire correspondre les noms de chacun de vos utilisateurs sous la forme souhaitée. C'est ce que fait le WP No Category Base pour les catégories, donc la plupart du code dans ma réponse est adapté de ce plugin.

La partie principale du plugin est une fonction qui se connecte au filtre author_rewrite_rules et remplace les règles de réécriture d'auteur. Cela récupère tous les noms d'utilisateur et ajoute une règle de réécriture spécifiquement pour chaque utilisateur (le ci-dessous ne gérera pas les flux, alors regardez la source WP No Category Base si vous en avez besoin).

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; 
} 

L'autre élément essentiel du plugin est une fonction qui accroche dans le filtre author_link et supprime la base de l'auteur "de l'URL de retour.

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; 
} 

Voir ce point essentiel: http://gist.github.com/564465

Cela ne gère pas la redirection des anciennes URL de l'auteur de style, encore une fois, voir le WP No Catégorie source de base si vous avez besoin de le faire.

+0

Merci @Cameron, j'ai utilisé ce code, c'est parfait! :) – Hopelessone

1

Assurez-vous de remplacer ce morceau de code à l'intérieur 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(); 
    } 
} 

Alors que Wordpress actualise la liste de réécriture. (sinon, certains liens peuvent ne pas fonctionner).