Esiste un modo (plugin?) per limitare un utente alla modifica di una sola pagina?

13 set 2010, 13:32:20
Visualizzazioni: 17K
Voti: 9

Utilizziamo WordPress come CMS e vorremmo permettere agli utenti di avere una "pagina personale". Idealmente, dovrebbero essere impediti di modificare l'intero sito.

Esiste un modo semplice per limitare i diritti di modifica degli utenti a una singola pagina?

Attualmente sto usando il plugin Members per altre funzionalità basate sui permessi, quindi sarebbe fantastico se una soluzione potesse integrarsi bene con questo o sostituirlo completamente.

Punti bonus per la creazione automatica di una homepage quando viene creato un nuovo utente.


AGGIORNAMENTI: Vorrei chiarire che queste pagine devono essere limitate a un'area specifica del sito (cioè tutte figlie della stessa pagina). Inoltre, dopo aver parlato con alcuni utenti, sembra che troverebbero utile poter creare sotto-pagine che partono dalla loro homepage.

0
Tutte le risposte alla domanda 8
0

Un'installazione base di WordPress probabilmente non farà quello che desideri. Potresti configurare un'istanza multisito e consentire agli utenti di avere il proprio sito 'secondario', oppure utilizzare qualcosa come BuddyPress o Mingle che includono funzionalità di profilo utente.

15 set 2010 00:15:18
2

Mi dispiace doverlo fare, ma mi sono imbattuto nella risposta nei forum di WordPress.

Si scopre che Role Scoper gestisce questa funzionalità molto bene. L'autore di quel post sul forum l'ha espresso al meglio:

Per consentire a un utente di modificare una pagina specifica, ma nient'altro:

  1. Assegnagli il ruolo di WordPress di Sottoscrittore
  2. Gestisci > Pagine > Modifica la sua pagina
  3. Espandi la scheda "Editori" sotto "Opzioni avanzate"
  4. Seleziona la casella di controllo non racchiusa a sinistra del nome del tuo utente (se verranno create pagine figlie, seleziona anche la casella racchiusa {[]}, che assegna il ruolo a tutte le pagine figlie presenti o future)
  5. Salva la Pagina
29 gen 2011 14:18:30
Commenti

Sembra un processo manuale. E se avessi migliaia di utenti?

MikeSchinkel MikeSchinkel
29 gen 2011 22:16:12

È certamente vero, ma è la soluzione più vicina finora. Terrò la bounty aperta fino alla fine.

Tom Wright Tom Wright
30 gen 2011 13:59:26
3

Mi sono trovato nella stessa situazione e quello che ho fatto è stato creare un tipo di post personalizzato chiamato "homepage" e ho anche creato il plugin "Bainternet Posts Creation Limits" per limitare la creazione di ogni tipo di post per utente. Provalo http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

29 gen 2011 13:59:20
Commenti

Approccio semplice e carino. Piccolo problema con il fatto che sia basato sui post - voglio anche limitare dove si trova la pagina.

Tom Wright Tom Wright
30 gen 2011 14:04:16

limitare dove si trova la pagina? Puoi spiegare meglio?

Bainternet Bainternet
30 gen 2011 16:05:18

Quindi il problema qui è che voglio avere tutte le pagine degli utenti nello stesso posto. Ad esempio mysite.com/users/bob Inoltre, voglio anche permettere sottopagine nello stesso stile: mysite.com/users/bob/miasottopagina

Tom Wright Tom Wright
1 feb 2011 17:14:25
0

Il plugin User Access Manager farà questo per te, tutti gli altri approcci sono troppo complicati. UAM è semplicemente facile, imposta i gruppi e assegna il gruppo alle tue sotto-pagine, fatto.

2 ago 2012 23:46:59
0

Userei il Capability Manager o verificherei i ruoli e le capacità nel codex per fare questo.

14 set 2010 01:18:31
0

La soluzione implica che tu abbia disabilitato la modifica dei tipi di post "normali" (post, pagina).

Non è così difficile come potresti pensare. La chiave è il nome di login dell'utente. Lo stesso potrebbe essere fatto con le tassonomie o persino con i termini.

Vedi il seguente esempio (c'è anche un esempio per una query):

// 1° passo: Aggiungi un tipo di post per quell'utente con il suo 
//   nome di login e le relative capacità 
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 query potrebbe essere fatta così:
wp_reset_query(); // per sicurezza

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();
        // controlla la password
        if ( post_password_required() ) :
            the_content();
        elseif ( !current_user_can('') ) :
            // mostra un messaggio appropriato qui
            return;
        else :

            // qui va il tuo contenuto

        endif;
    endwhile;

else : // altrimenti; nessun post
    printf(__( 'Niente dal Sig./Sig.ra %1$s finora.', TEXTDOMAIN ), $current_user->user_firstname.' '.$current_user->user_lastname);
endif; // endif; have_posts();

wp_rewind_posts(); // per una seconda query

Con le tassonomie questo avrebbe ancora più senso, perché potresti interrogare solo i post che sono taggati con i termini delle tassonomie di questo utente, ma questo richiederebbe un meta box per il post con i termini della tassonomia dell'utente. La condizione sarebbe la stessa: nome di login dell'utente e aggiungeresti semplicemente la tassonomia:

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

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

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

        // Registra
        register_taxonomy ( 
             $current_user->user_login
            ,array ( 'post', 'page' )
            ,$args
        ); 
        // Aggiungi al tipo di post
        // puoi anche aggiungere qui il tuo tipo di post dell'utente corrente
        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' );

Il posizionamento del controllo delle capacità (current_user_can) potrebbe essere anche altrove. Dipende tutto dalle tue esigenze specifiche. Solo per chiarire: questi sono esempi per guidarti verso una soluzione. Spero che sia utile :)

4 feb 2011 02:59:25
0

Ho fatto qualcosa di simile con "members", un custom post type, e un'assegnazione manuale dei diritti di autore a un membro specifico, visto che si tratta di un sito web per un piccolo gruppo, ma ricordo di aver letto in qualche thread di supporto di BuddyPress che è possibile agganciarsi al processo di registrazione, quindi suppongo sia possibile creare automaticamente una pagina/custom post type per utente al momento della registrazione e assegnare quella pagina specifica al nuovo membro come homepage. Ho anche aggiunto l'editor front-end di Scribu e bloccato il backend ai membri che non sono amministratori. Probabilmente potresti anche aggiungere un redirect al momento della registrazione in modo che i nuovi membri vengano reindirizzati alla loro pagina (che, suppongo, potrebbe avere del contenuto predefinito).

Vedrò se riesco a trovare quel thread di supporto di BuddyPress.

Aggiunta - c'è un bug nel selettore dell'autore nel campo di modifica del post. Attualmente non utilizza il sistema standard dei permessi, il che potrebbe rendere più difficile la soluzione dei membri (anche se probabilmente funzionerà se l'autore viene assegnato al momento della creazione della pagina). C'è una patch in trac, ma non credo sia stata ancora applicata al core.

31 gen 2011 08:32:19
0

questo è possibile con il plugin s2member, la versione gratuita è sufficiente. Ho creato un'area clienti dove ogni cliente ha un URL c'è un video tutorial qui: http://www.primothemes.com/forums/viewtopic.php?f=4&t=586&start=0&hilit=client+area

1 feb 2011 11:50:44