web-dev-qa-db-fra.com

Existe-t-il un moyen (plugin?) D’empêcher un utilisateur d’éditer une seule page?

Nous utilisons WordPress comme un CMS et aimerions beaucoup permettre aux utilisateurs d’avoir une "page d’accueil". Idéalement, ils seraient empêchés de tout nettoyer sur le site.

Existe-t-il un moyen simple de limiter les droits de modification des utilisateurs à une seule page?

J'utilise actuellement le plug-in Members pour effectuer d'autres tâches basées sur les autorisations. Il serait donc intéressant qu'une solution puisse augmenter de façon significative ce problème ou le remplacer entièrement.

Points bonus pour la création automatique d'une page d'accueil lors de la création d'un nouvel utilisateur.


MISES À JOUR: Je devrais préciser que ces pages doivent être limitées à une zone spécifique du site (c'est-à-dire tous les enfants de la même page). De plus, après avoir parlé à certains utilisateurs, il semble qu'ils trouveraient utile de créer des sous-pages partant de leur page d'accueil.

9
Tom Wright

Désolé de le faire, mais je suis tombé sur la réponse dans les forums wordpress .

Il se trouve que Role Scoper le fait très bien. L'auteur de ce post du forum l'a dit le mieux:

Pour permettre à un utilisateur de modifier une page en particulier, mais rien d’autre:

  1. Donnez-leur un rôle WordPress d'abonné
  2. Gérer> Pages> Modifier leur page
  3. Développez l'onglet "Editors" sous "Advanced Options"
  4. Cochez la case non soulignée située à gauche du nom de votre utilisateur (si des pages enfants sont créées, cochez également la case entretoise {[]], qui attribue le rôle à toutes les pages enfants actuelles ou futures).
  5. Sauvegarder la page
4
Tom Wright

Une installation WordPress de base ne fera probablement pas ce que vous voulez. Vous pouvez configurer une instance multi-site et permettre aux utilisateurs de créer leur propre "sous-site" ou d'utiliser quelque chose comme BuddyPress ou Mingle doté d'une fonction de profil d'utilisateur.

5
Norcross

J'ai fait face à la même situation que vous et ce que j'ai fait a été de créer un type de message personnalisé nommé "page d'accueil" et également de créer le plug-in "Limites de création de messages Bainternet" pour limiter la création de chaque type de message par utilisateur. Essayez-le http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

3
Bainternet

Le plugin User Access Manager le fera pour vous, toutes les autres approches sont beaucoup trop compliquées. UAM est tout simple, vous pouvez configurer des groupes et affecter le groupe à vos sous-pages, prêt.

2
BUGHUNTER

La solution implique que vous avez désactivé la modification des types de publication "normaux" (publication, page).

C'est pas aussi difficile que vous pourriez le croire. La clé est le nom d'utilisateur . La même chose pourrait être faite avec des taxonomies ou même des termes.

Voir ce qui suit (il y a aussi un exemple pour une requête):

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

Avec les taxonomies, cela aurait même plus de sens, car vous ne pouvez interroger que les posts étiquetés avec des termes issus des taxonomies de cet utilisateur, mais cela nécessiterait une méta-boîte de publication contenant les termes de taxonomie de l'utilisateur. La condition serait la même: nom d'utilisateur et vous ajouteriez simplement la taxonomie:

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' );

L'emplacement du contrôle de capacité (current_user_can) pourrait également être placé ailleurs. Tout dépend de vos besoins spécifiques. Juste pour vous en assurer, voici des exemples pour vous guider sur le chemin de la solution. J'espère que aide :)

1
kaiser

Pour ce faire, j'utiliserais le Gestionnaire de capacités ou consulterais les rôles et les fonctionnalités du codex.

1
Ben West

c'est possible avec le plugin s2member, la version gratuite suffit. J'ai créé une zone client où chaque client a une URL. Il existe un didacticiel vidéo ici: http://www.primothemes.com/forums/viewtopic.php?f=4&t=586&start=0&hilit=client+area

0
paul

J'ai fait quelque chose de similaire avec "membres", un type d'article personnalisé et une attribution manuelle des droits d'auteur à un membre spécifique, car il s'agit d'un site Web de petit groupe, mais je me souviens de l'avoir lu dans un fil de discussion avec la presse qu'il est possible pour s’inscrire au processus d’inscription, je suppose donc qu’il serait possible de créer automatiquement une page/un type de publication personnalisé par utilisateur lors de l’inscription et d’affecter cette page spécifique au membre nouvellement créé en tant que page d’accueil. J'ai également ajouté l'éditeur de Scribu et bloqué le backend aux membres qui ne sont pas administrateurs. Vous pouvez probablement aussi ajouter une redirection lors de l'inscription afin que les nouveaux membres soient redirigés vers leur page (qui, je suppose, pourrait avoir du contenu par défaut).

Je verrai si je peux trouver ce fil de soutien buddypress.

Addenda - il y a un bogue dans le sélecteur d'auteur dans le champ de publication. Actuellement, il n'utilise pas le système d'autorisation standard, ce qui peut compliquer la solution des membres (même si cela fonctionnera probablement si l'auteur est affecté à la création de page). Il y a un correctif dans trac, mais je ne pense pas qu'il a encore été appliqué au noyau.

0
user2789