web-dev-qa-db-fra.com

Ajouter plus de pages aux pages d'auteurs

Pour le moment, j'ai le code suivant pour changer le slug de author_base.

/** ADD REWRITE RULES **/
function change_author_permalinks() {
   global $wp_rewrite;

   $wp_rewrite->author_base = 'profile';
   $wp_rewrite->flush_rules();
}
add_action('init','change_author_permalinks');

Comment puis-je ajouter, par exemple, une page "d'édition" supplémentaire à cela, c'est-à-dire,/profile/mon-nom-d'utilisateur/edit ???

2
EddyR

Les règles de réécriture d'auteur sont filtrées via author_rewrite_rules . Vous pouvez y ajouter une règle pour le motif author/([^/]+)/edit/?$, mais la substitution dépendra de la manière dont vous souhaitez créer la page edit. Un exemple simple qui va définir une variable de requête personnalisée et charger un modèle spécifique si cette variable est définie:

add_action( 'author_rewrite_rules', 'wpse18547_author_rewrite_rules' );
function wpse18547_author_rewrite_rules( $author_rules )
{
    $author_rules['author/([^/]+)/edit/?$'] = 'index.php?author_name=$matches[1]&wpse18547_author_edit=1';
    return $author_rules;
}

add_filter( 'query_vars', 'wpse18547_query_vars' );
function wpse18547_query_vars( $query_vars )
{
    $query_vars[] = 'wpse18547_author_edit';
    return $query_vars;
}

add_filter( 'author_template', 'wpse18547_author_template' );
function wpse18547_author_template( $author_template )
{
    if ( get_query_var( 'wpse18547_author_edit' ) ) {
        return locate_template( array( 'edit-author.php', $author_template ) );
    }
    return $author_template;
}

Petit conseil: N'appelez pas flush_rules() sur chaque init, c'est une opération coûteuse. Vous ne devez le faire que lorsque les règles de réécriture changent. Vous pouvez vider manuellement les règles en visitant simplement la page de paramètres Permaliens . Et si vous allez jouer avec les règles de réécriture, je vous recommande d’installer mon plugin d’analyseur Rewrite .

3
Jan Fabry