¿Hay alguna forma (¿complemento?) De restringir a un usuario para que pueda editar solo una página?

9

Usamos WordPress como un CMS y nos gustaría mucho permitir que los usuarios tengan una "página de inicio". Idealmente, se les impediría inundar el sitio completo.

¿Existe una manera simple de limitar los derechos de edición de los usuarios a una sola página?

Actualmente estoy usando el complemento Miembros para hacer otras cosas basadas en permisos, por lo que sería genial si una solución pudiera aumentar esto o reemplazarlo por completo.

Puntos de bonificación para 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 limitarse a un área específica del sitio (es decir, todos los niños de la misma página). Además, después de hablar con algunos usuarios, parece que les sería útil crear subpáginas ramificadas desde su página de inicio.

Tom Wright
fuente

Respuestas:

5

Una instalación básica de WordPress probablemente no hará lo que quieres. Puede configurar una instancia de varios sitios y permitir que los usuarios tengan su propio sitio 'secundario', o usar algo como BuddyPress o Mingle que tiene una función de perfil de usuario.

Norcross
fuente
4

Lamento hacer esto, pero me topé con la respuesta en los foros de WordPress .

Resulta que Role Scoper hace esto realmente 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:

  1. Dales un rol de suscriptor en WordPress
  2. Administrar> Páginas> Editar su página
  3. Expanda la pestaña "Editores" en "Opciones avanzadas"
  4. Marque la casilla de verificación sin llaves a la izquierda del nombre de su usuario (si se crearán páginas secundarias, marque también la casilla de verificación con llaves {[]}, que asigna el rol para todas las páginas secundarias actuales o futuras)
  5. Guardar la página
Tom Wright
fuente
Suena como un proceso manual. ¿Qué pasa si tienes miles de usuarios?
MikeSchinkel
Eso es ciertamente cierto, pero es el más cercano hasta ahora. Mantendré la recompensa abierta hasta el final.
Tom Wright
3

Me enfrenté a la misma situación que tú y lo que hice fue crear un tipo de publicación personalizado llamado "página de inicio" y también creé el complemento "Límites de creación de publicaciones de Bainternet" para limitar la creación de cada tipo de publicación por usuario. Pruébelo http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

Bainternet
fuente
Buen enfoque simple. Ligero problema con el hecho de que esté basado en publicaciones: también quiero limitar dónde está la página.
Tom Wright
limitar donde está la página? ¿le importaria explicar?
Bainternet
Entonces, el problema aquí es que quiero tener todas las páginas de los usuarios en el mismo lugar. Es decir, mysite.com/users/bob Plus, también quiero permitir subpáginas en el mismo estilo: mysite.com/users/bob/mysubpage
Tom Wright
2

El complemento de User Access Manager lo hará por usted, todos los demás enfoques son demasiado complicados. UAM es fácil, configura grupos y asigna el grupo a tus subpáginas, listo.

BUGHUNTER
fuente
1

La solución implica que ha deshabilitado la edición de los tipos de publicaciones "normales" (publicación, página).

Es no tan difícil como se podría creer. La clave es el nombre de usuario de inicio de sesión . Lo mismo podría hacerse con taxonomías o incluso términos.

Consulte lo siguiente (también hay un ejemplo para una consulta):

// 1st: Add a post type for that user with it's 
//   user login & according capabilities 
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' );

// A query could be done like this:
wp_reset_query(); // to be sure

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();
        // check for password
        if ( post_password_required() ) :
            the_content();
        elseif ( !current_user_can('') ) :
            // display some decent message here
            return;
        else :

            // here goes your content

        endif;
    endwhile;

else : // else; no posts
    printf(__( 'Nothing from Mr./Mrs. %1$s so far.', TEXTDOMAIN ), $current_user->user_firstname.' '.$current_user->user_lastname);
endif; // endif; have_posts();

wp_rewind_posts(); // for a sec. query

Con las taxonomías, esto incluso tendría más sentido, ya que podría consultar solo las publicaciones etiquetadas con términos de las taxonomías de estos usuarios, pero eso necesitaría un cuadro de metaetiqueta con los términos de la taxonomía de los usuarios. La condición sería la misma: nombre de usuario y solo agregaría 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';

        // labels
        $labels = array (
                 'name'         => $plural
                ,'singular_name'=> $singular
            );

        // args
        $args = array (
             'public'               => true
            ,'show_in_nav_menus'    => true
            ,'show_ui'              => true
            ,'query_var'            => true
            ,'labels'               => $labels
            ,'capabilities' => array(
                'manage_'.$current_user->user_login
            )
        );

        // Register
        register_taxonomy ( 
             $current_user->user_login
            ,array ( 'post', 'page' )
            ,$args
        ); 
        // Add to post type
        // you can even add your current user post type here
        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 capacidad (current_user_can) también podría estar en otro lugar. Depende todo de sus necesidades específicas. Solo para asegurarnos de esto: Estos son ejemplos para guiarlo en su camino hacia una solución. Espero que ayude :)

emperador
fuente
0

He hecho algo similar con "miembros", un tipo de publicación personalizada y una asignación manual de derechos de autor a un miembro específico, ya que es un sitio web de un grupo pequeño, pero recuerdo haber leído en algún hilo de soporte de prensa de amigos que es posible para conectarse al proceso de registro, por lo que supongo que sería posible crear automáticamente una página / tipo de publicación personalizada por usuario al registrarse y asignar esa página específica al miembro recién creado como página de inicio. También agregué el editor front-end de Scribu y bloqueé el backend a los miembros que no son administradores. Probablemente también pueda agregar una redirección al registrarse para que los nuevos miembros sean redirigidos a su página (que, supongo, podría tener algún contenido predeterminado).

Veré si puedo encontrar ese hilo de soporte de buddypress.

Anexo: hay un error en el selector de autor en el campo de publicación de edición. Actualmente no utiliza el sistema de permisos estándar, lo que puede dificultar la solución de los miembros (aunque probablemente funcionará si el autor está asignado en la creación de la página). Hay un parche en trac, pero no creo que se haya aplicado al núcleo todavía.


fuente