Après des heures de recherche et d’essai de différentes fonctions, j’ai finalement réussi à supprimer l’URL/author/de tous les URL de profil de nos utilisateurs. Donc, c'est juste/nom d'utilisateur /
Cependant, lorsque les nouveaux utilisateurs enregistrent leurs URL de profil, ils indiquent tous 404. Je peux résoudre ce problème en allant sur l'écran permaliens et en cliquant sur Enregistrer, mais nous enregistrons beaucoup d'utilisateurs et je ne peux pas le faire pour chacun d'eux.
C’est la fonction que j’utilise ... Toutes les idées!?
Merci!
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;
}
if( !is_admin() ) {
add_action('init', 'author_rewrite_so_22115103');
}
function author_rewrite_so_22115103() {
global $wp_rewrite;
if( 'author' == $wp_rewrite->author_base ) $wp_rewrite->author_base = null;
}
Vous faites juste la mauvaise chose. Ajouter une règle de réécriture par utilisateur va simplement alourdir le "tableau" de réécriture et ralentir le processus d'analyse des URL. Vous devez définir une règle de réécriture générique qui conviendra à tous les utilisateurs ou écrire une autre analyse d’URL à l’aide du filtre 'do_parse_request.
Votre problème principal est que votre structure d'URL telle qu'elle est maintenant "se heurte" à la structure d'URL des publications/catégories/etc., et le meilleur moyen consiste simplement à utiliser un préfixe constant et prévisible pour vos URL d'utilisateur, quelque chose comme /user/{user login}/...
sinon, le seul Dans un site comptant de nombreux utilisateurs, l’option appropriée est de faire votre propre analyse.
Ajoutez également ceci près des deux autres similaires, afin de rediriger également les flux:
$author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
author_rewrite_rules
ne sera appelé que lorsque WordPress doit régénérer les règles de réécriture. Vous devez donc donner à WordPress une raison de le faire. L'enregistrement sur la page de permaliens est un moyen. Une autre solution serait d’attacher l’action user_register
, appelée juste après la création d’un nouvel utilisateur. Dans votre fonction de gestion, appelez flush_rewrite_rules()
.