web-dev-qa-db-ja.com

マルチサイト/ネットワークサイト名をユーザーのプロパティに制限する

ユーザーが自分のブログを作成するときに選択できるブログ名を制限する必要があります。

すべてのブログがドメイン名を共有するように設定されたWordPressネットワークがあります。例:domain.name.com/xdomain.name.com/yなど.

Active Directory統合プラグインを使用して、WordPressネットワークを社内のActive Directoryと統合しました。そのプラグインは、ユーザーのmailnickname属性(@の前のEメールアドレスの一部)をニックネームフィールドに入れます。

ユーザーが自分のブログを自分で作成できるようにしたいが、ブログの名前をWordPressアカウントのニックネームフィールドと一致するように制限したい。たとえば、ニックネームjdoeのユーザーは、domain.name.com/jdoeという名前のブログしか作成できませんでした。

理想的には、/ wp-signup.phpでは、blognameフィールドが表示されない場合に最適です。

PHPをカスタマイズせずにこれを実行する方法はありますか?私はプラグインがすでに存在することを望んでいましたが、私はそれを見つけることができません。

2
Aren Cambre

wp-signup.php のソースを見ると、signup_blog_initをフィルタリングすることが最善の策であるように見えます(v。3.5.1の303行目)。

/*
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

これがうまくいくかどうかは100%確信できませんが、試してみる価値があります。

編集済み

OK、下のコメントの後、私はvalidate_blog_signup()を見ました。 wpmu_validate_blog_signup()を呼び出し、フィルタを提供します - wpmu_validate_blog_signupコード を見ると、次のようなものがうまくいくはずです。

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

コードを正しく読んでいれば、次のようにフィルタ処理できます。

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