Esiste un modo (plugin?) per limitare un utente alla modifica di una sola pagina?
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.
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.

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:
- Assegnagli il ruolo di WordPress di Sottoscrittore
- Gestisci > Pagine > Modifica la sua pagina
- Espandi la scheda "Editori" sotto "Opzioni avanzate"
- 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)
- Salva la Pagina

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/

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

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

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

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 :)

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.

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
