El problema

En un desarrollo basado en WordPress MU necesito que los usuarios:

  1. no puedan crear nuevos blogs;
  2. puedan registrarse en los blogs ya existentes;
  3. queden registrados como autores, con capacidad para publicar entradas, gestionar sus entradas y moderar los comentarios a sus entradas;
  4. estando logueados en un blog, puedan registrarse en otros blogs del sistema de la manera más sencilla posible (evitando, por ejemplo, nuevas verificaciones de la dirección de e-mail, etc.).

Lo que hay

En la instalación estándar de WPMU los nuevos usuarios tienen la alternativa de crear un nuevo blog en el sistema o de registrarse simplemente como usuarios. En el caso en que elijan registrarse sin abrir un blog, se los asigna como subscriptores al blog principal. No hay manera de que los usuarios se registren como otra cosa que subscriptores en un blog que no sea el blog principal del sistema. Esta lógica, diferente a la de la versión monoblog de WP, es señalada como un problema en diferentes hilos del foro de WPMU.

Una solución

Acá se puede ver una solución al problema del registro de usuarios en WordPress MU que va en la dirección de mis necesidades, pero, como es de esperar, no las satisface completamente.

Sigo el procedimiento de miteshashar adaptándolo cuando es necesario. Hay que modificar tres archivos en la instalación de WPMU:

- wp-includes/wpmu-functions.php
- wp-signup.php
- wp-activate.php

En wp-signup.php:

1. Comentar las siguientes funciones:

- show_blog_form
- validate_blog_form
- signup_another_blog
- validate_another_blog signup
- confirm_another_blog_signup
- signup_blog
- validate_blog_signup
- confirm_blog_signup

2. Reemplazar, a partir de la línea 245, el siguiente código:


<tr>
<th scope="row" valign="top">&nbsp;</th>
<td>
<p>
<?php if( $active_signup == 'blog' ) { ?>
<input id="signupblog" type="hidden" name="signup_for" value="blog" />
<?php } elseif( $active_signup == 'user' ) { ?>
<input id="signupblog" type="hidden" name="signup_for" value="user" />
<?php } else { ?>
<input id="signupblog" type="radio" name="signup_for" value="blog" <?php echo $signup[ 'blog' ] ?> />
<label for="signupblog"><?php _e('Gimme a blog!') ?></label>
<br />
<input id="signupuser" type="radio" name="signup_for" value="user" <?php echo $signup[ 'user' ] ?> />
<label for="signupuser"><?php _e('Just a username, please.') ?></label>
<?php } ?>
</p>
</td>
</tr>

por este otro:

<input id="signupblog" type="hidden" name="signup_for" value="user" />

Esto fuerza la registración como usuario y elimina la alternativa entre abrir un blog u obtener un nombre de usuario.

3. Esto sigue.