Existe-t-il un moyen (plugin?) De restreindre un utilisateur à la possibilité de modifier une seule page?

9

Nous utilisons wordpress comme un CMS et aimerions beaucoup permettre aux utilisateurs d'avoir une "page d'accueil". Idéalement, ils ne pourraient pas nettoyer tout le site.

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

J'utilise actuellement le plugin Members pour faire d'autres choses basées sur les autorisations, donc ce serait génial si une solution pouvait augmenter proprement cela ou la remplacer entièrement.

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


MISES À JOUR: Je dois préciser que ces pages doivent être confiné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 à partir de leur page d'accueil.

Tom Wright
la source

Réponses:

5

Une installation WordPress de base ne fera probablement pas ce que vous voulez. Vous pouvez configurer une instance multisite et autoriser les utilisateurs à avoir leur propre «sous-site», ou utiliser quelque chose comme BuddyPress ou Mingle qui a une fonction de profil utilisateur.

Norcross
la source
4

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

Il s'avère que Role Scoper le fait très bien. L'auteur de ce message sur le forum l'a dit le mieux:

Pour permettre à un utilisateur de modifier une page particulière, mais pas autre chose:

  1. Donnez-leur un rôle WordPress d'abonné
  2. Gérer> Pages> Modifier leur page
  3. Développez l'onglet "Editeurs" sous "Options avancées"
  4. Cochez la case non barrée à gauche du nom de votre utilisateur (si des pages enfants seront créées, cochez également la case barrée {[]}, qui attribue le rôle à toutes les pages enfant actuelles ou futures)
  5. Enregistrez la page
Tom Wright
la source
Cela ressemble à un processus manuel. Et si vous avez des milliers d'utilisateurs?
MikeSchinkel
C'est certainement vrai, mais c'est le plus proche jusqu'à présent. Je garderai la prime ouverte jusqu'à la fin.
Tom Wright
3

J'ai fait face à la même situation que vous et ce que j'ai fait a été de créer un type de publication personnalisé nommé "homepage" et j'ai également créé le plugin "Bainternet Posts Creation Limits" pour limiter la création de chaque type de publication par utilisateur. Essayez-le http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

Bainternet
la source
Belle approche simple. Un léger problème avec le fait qu'il soit basé sur le post - je veux également limiter l'emplacement de la page.
Tom Wright
limiter où se trouve la page? soin d'expliquer?
Bainternet
Donc, le problème ici est que je veux avoir toutes les pages des utilisateurs au même endroit. C'est-à-dire mysite.com/users/bob Plus, je veux également autoriser les sous-pages dans le même style: mysite.com/users/bob/mysubpage
Tom Wright
2

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

BUGHUNTER
la source
1

La sollicution implique que vous avez désactivé l'édition des types de messages "normaux" (message, page).

Ce n'est pas aussi difficile qu'on pourrait le croire. La clé est le nom de connexion de l' 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 de 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 publications étiquetées avec les termes des taxonomies de ces utilisateurs, mais cela nécessiterait une méta-boîte de publication avec les termes de taxonomie des utilisateurs. La condition serait la même: nom de connexion de l'utilisateur et il suffit d'ajouter 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' );

Le placement de la vérification des capacités (current_user_can) pourrait également être ailleurs. Tout dépend de vos besoins spécifiques. Juste pour être sûr que ce sont des exemples pour vous guider sur votre chemin vers une sollicution. J'espère que ça aide :)

kaiser
la source
0

J'ai fait quelque chose de similaire avec "membres", un type de publication personnalisé et une attribution manuelle des droits d'auteur à un membre spécifique, car il s'agit d'un site Web en petit groupe, mais je me souviens avoir lu dans un fil de support de la presse d'amis qu'il était possible pour se connecter au processus d'inscription, donc je suppose 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 frontal de Scribu et bloqué le backend pour les membres qui ne sont pas des administrateurs. Vous pouvez probablement également 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 vais voir si je peux trouver ce fil de support buddypress.

Addendum - il y a un bogue dans le sélecteur d'auteur dans le champ d'édition de l'article. Actuellement, il n'utilise pas le système d'autorisation standard, ce qui peut rendre la solution des membres plus difficile (bien que cela fonctionnera probablement si l'auteur est affecté à la création de la page). Il y a un patch dans trac, mais je ne pense pas qu'il ait encore été appliqué au noyau.


la source