¿Existe alguna forma (¿plugin?) de restringir a un usuario para que solo pueda editar una página?
Usamos WordPress como un CMS y nos gustaría permitir que los usuarios tengan una "página de inicio". Idealmente, deberían estar limitados para no afectar todo el sitio.
¿Existe una forma sencilla de limitar los derechos de edición de los usuarios a una sola página?
Actualmente estoy usando el plugin Members para otras configuraciones basadas en permisos, por lo que sería genial si una solución pudiera complementar esto o reemplazarlo por completo.
Puntos extra si la solución permite la creación automática de una página de inicio cuando se crea un nuevo usuario.
ACTUALIZACIONES: Debo aclarar que estas páginas deben estar confinadas a un área específica del sitio (es decir, todas como hijas de la misma página). Además, después de hablar con algunos usuarios, parece que les resultaría útil crear subpáginas derivadas de su página de inicio.
Una instalación básica de WordPress probablemente no hará lo que necesitas. Podrías configurar una instancia multisitio y permitir que los usuarios tengan su propio 'sub' sitio, o usar algo como BuddyPress o Mingle que incluyen funciones de perfiles de usuario.

Lamento hacer esto, pero me encontré con la respuesta en los foros de WordPress.
Resulta que Role Scoper hace esto muy bien. El autor de esa publicación en el foro lo dijo mejor:
Para permitir que un usuario edite una página en particular, pero nada más:
- Asígnale un rol de WordPress como Suscriptor
- Administrar > Páginas > Editar su página
- Expande la pestaña "Editores" en "Opciones Avanzadas"
- Marca la casilla sin corchetes a la izquierda del nombre de tu usuario (si se crearán páginas hijas, también marca la casilla con corchetes {[]}, que asigna el rol para todas las páginas hijas actuales o futuras)
- Guarda la Página

Me enfrenté a la misma situación que tú y lo que hice fue crear un tipo de contenido personalizado llamado "página de inicio" y también creé el plugin "Bainternet Posts Creation Limits" para limitar la creación de cada tipo de contenido por usuario. Pruébalo http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

Enfoque simple y agradable. Pequeño problema con que esté basado en publicaciones - también quiero limitar dónde está la página.

El problema aquí es que quiero tener todas las páginas de usuarios en el mismo lugar. Por ejemplo, misitio.com/usuarios/bob Además, también quiero permitir subpáginas con el mismo estilo: misitio.com/usuarios/bob/misubpagina

Yo usaría el Capability Manager o revisaría los roles y capacidades en el codex para hacer esto.

La solución implica que hayas deshabilitado la edición de tipos de post "normales" (post, página).
No es tan difícil como podrías creer. La clave está en el nombre de usuario (user login name). Lo mismo podría hacerse con taxonomías o incluso términos.
Mira el siguiente ejemplo (hay un ejemplo para una consulta también):
// 1ro: Añadir un tipo de post para ese usuario con su
// nombre de usuario y capacidades correspondientes
function create_user_home() {
global $current_user;
get_currentuserinfo();
register_post_type(
'home_of_'.$current_user->user_login,
array(
'public' => true,
'capability_type' => $current_user->user_login,
'capabilities' => array(
'publish_posts' => 'publish_'.$current_user->user_login,
'edit_posts' => 'edit_'.$current_user->user_login,
'edit_others_posts' => 'edit_'.$current_user->user_login,
'delete_posts' => 'delete_'.$current_user->user_login,
'delete_others_posts' => 'delete_others_'.$current_user->user_login,
'read_private_posts' => 'read_private_'.$current_user->user_login,
'edit_post' => 'edit_'.$current_user->user_login,
'delete_post' => 'delete_'.$current_user->user_login,
'read_post' => 'read_'.$current_user->user_login,
),
)
);
}
add_action( 'init', 'create_user_home' );
// Una consulta podría hacerse así:
wp_reset_query(); // para asegurarse
global $wp_query, $current_user;
get_currentuserinfo();
$query_user_home = new WP_Query( array(
,'order' => 'ASC'
,'post_type' => 'home_of_'.$current_user->user_login
,'post_status' => 'publish'
) );
if ( $query_user_home->have_posts() ) :
while ( $query_user_home->have_posts() ) : $query_user_home->the_post();
// verificar contraseña
if ( post_password_required() ) :
the_content();
elseif ( !current_user_can('') ) :
// mostrar un mensaje apropiado aquí
return;
else :
// aquí va tu contenido
endif;
endwhile;
else : // else; no hay posts
printf(__( 'Nada del Sr./Sra. %1$s hasta ahora.', TEXTDOMAIN ), $current_user->user_firstname.' '.$current_user->user_lastname);
endif; // endif; have_posts();
wp_rewind_posts(); // para una segunda consulta
Con taxonomías esto tendría aún más sentido, porque podrías consultar solo los posts etiquetados con términos de las taxonomías de este usuario, pero eso requeriría un meta box en el post con los términos de la taxonomía del usuario. La condición sería la misma: nombre de usuario y simplemente añadirías la taxonomía:
function create_user_tax() {
if ( current_user_can("$current_user->user_login") ) :
global $current_user;
get_currentuserinfo();
$singular = $current_user->user_login;
$plural = $singular.'\'s';
// etiquetas
$labels = array (
'name' => $plural
,'singular_name'=> $singular
);
// argumentos
$args = array (
'public' => true
,'show_in_nav_menus' => true
,'show_ui' => true
,'query_var' => true
,'labels' => $labels
,'capabilities' => array(
'manage_'.$current_user->user_login
)
);
// Registrar
register_taxonomy (
$current_user->user_login
,array ( 'post', 'page' )
,$args
);
// Añadir al tipo de post
// incluso puedes añadir tu tipo de post de usuario actual aquí
register_taxonomy_for_object_type (
$current_user->user_login
,array ( 'post', 'page', 'home_of_'.$current_user->user_login )
);
endif;
}
add_action( 'init', 'create_user_tax' );
La ubicación de la verificación de capacidades (current_user_can) podría estar en otro lugar también. Todo depende de tus necesidades específicas. Solo para dejarlo claro: Estos son ejemplos para guiarte en tu camino hacia una solución. Espero que ayude :)

Hice algo similar con "miembros", un tipo de contenido personalizado, y una asignación manual de derechos de autor a un miembro específico, ya que es un sitio web para un grupo pequeño, pero recuerdo haber leído en algún hilo de soporte de BuddyPress que es posible engancharse al proceso de registro, así que supongo que sería posible crear automáticamente una página/tipo de contenido personalizado por usuario al registrarse y asignar esa página específica al nuevo miembro como página de inicio. También añadí el editor de front-end de Scribu y bloqueé el backend a los miembros que no son administradores. Probablemente también podrías añadir una redirección al registrarse para que los nuevos miembros sean redirigidos a su página (que, supongo, podría tener algún contenido por defecto).
Veré si puedo encontrar ese hilo de soporte de BuddyPress.
Adenda - hay un error en el selector de autor en el campo de edición de entrada. Actualmente no usa el sistema estándar de permisos, lo que puede hacer la solución de miembros más difícil (aunque probablemente funcionaría si el autor se asigna al crear la página). Hay un parche en trac, pero no creo que se haya aplicado al núcleo todavía.

esto es posible con el plugin s2member, la versión gratuita es suficiente. Creé un área de clientes donde cada cliente tiene una URL.
Hay un video tutorial aquí: http://www.primothemes.com/forums/viewtopic.php?f=4&t=586&start=0&hilit=client+area
