web-dev-qa-db-fra.com

Limiter les noms de site multisite

Nous devons limiter les noms de blogs que les utilisateurs peuvent choisir lorsqu'ils créent leurs propres blogs.

Nous avons un réseau WordPress configuré pour que tous les blogs partagent un nom de domaine. Par exemple, domain.name.com/x, domain.name.com/y, etc.

Nous avons intégré notre réseau WordPress à notre annuaire Active Directory d’entreprise à l’aide du plug-in d’intégration Active Directory. Ce plugin place l'attributmailnickname de l'utilisateur(la partie de l'adresse électronique précédant le @) dans le champpseudo.

J'aimerais autoriser les utilisateurs à créer eux-mêmes leurs propres blogs, mais en limitant les noms de blogs afin qu'ils correspondent au champpseudode leur compte WordPress. Par exemple, un utilisateur avec le pseudojdoene peut créer qu'un blog nommé domain.name.com/jdoe.

Idéalement, sur /wp-signup.php, il serait préférable que le champblognamene le soit même pas. afficher.

Existe-t-il un moyen de le faire sans PHP personnalisation? J'espérais qu'un plugin existerait déjà, mais je ne parviens pas à en trouver un.

2
Aren Cambre

En regardant la source de wp-signup.php , il semble que votre meilleur choix serait de filtrer signup_blog_init (ligne 303 de la v. 3.5.1):

/*
add_filter( 'signup_blog_init', 'wpse103022_blog_name' );
function wpse103022_blog_name( $blog_details ) {
    // Set $username to the user's username
    $blog_details['blogname'] = $username;
    return $blog_details;
}
*/
// see code below for replacement

Je ne suis pas sûr à 100% que cela fonctionnera, mais ça vaut le coup d'essayer.

Édité

OK, après votre commentaire ci-dessous, j’ai jeté un coup d’œil à validate_blog_signup(). Il appelle wpmu_validate_blog_signup(), et que fournit un filtre - wpmu_validate_blog_signup. En regardant le code , il apparaît que quelque chose comme ce qui suit devrait fonctionner:

add_filter( 'wpmu_validate_blog_signup', 'wpse103039_blog_name' );
function wpse103039_blog_name( $blog_details ) {
    $blog_details['path'] = '/' . $desired_blogname; // however you get it
    return $blog_details;
}

Si je lis le code correctement, vous pouvez filtrer:

  • domain
  • path
  • blogname
  • blog_title
  • user
  • errors
2
Pat J