C'è un modo (plugin?) Per limitare un utente alla possibilità di modificare solo una pagina?


9

Usiamo wordpress come un CMS e vorremmo molto consentire agli utenti di avere una "homepage". Idealmente gli sarebbe stato impedito di confondere l'intero sito.

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

Attualmente sto usando il plug-in Members per fare altre cose basate sui permessi, quindi sarebbe fantastico se una soluzione potesse migliorare o rimpiazzarlo completamente.

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


AGGIORNAMENTI: dovrei chiarire che queste pagine devono essere confinate in un'area specifica del sito (cioè tutti i figli della stessa pagina). Inoltre, dopo aver parlato con alcuni utenti sembra che troverebbero utile creare ramificazioni di sottopagine dalla loro home page.

Risposte:


5

Un'installazione di WordPress di base probabilmente non farà ciò che desideri. È possibile impostare un'istanza multi-sito e consentire agli utenti di avere il proprio sito "secondario" o utilizzare qualcosa come BuddyPress o Mingle con una funzione del profilo utente.


4

Mi dispiace farlo, ma mi sono imbattuto nella risposta nei forum di wordpress .

Si scopre che Role Scoper lo fa davvero bene. L'autore di quel post sul forum lo ha detto meglio:

Per consentire a un utente di modificare una determinata pagina, ma non altro:

  1. Assegna loro un ruolo in WordPress di Abbonato
  2. Gestisci> Pagine> Modifica la loro pagina
  3. Espandi la scheda "Editor" in "Opzioni avanzate"
  4. Seleziona la casella di controllo senza parentesi a sinistra del nome dell'utente (se verranno create pagine figlio, controlla anche la casella di controllo {[]}, che assegna il ruolo a tutte le pagine figlio correnti o future)
  5. Salva la pagina

Sembra un processo manuale. Cosa succede se hai migliaia di utenti?
MikeSchinkel,

Questo è certamente vero, ma finora è il più vicino. Terrò la taglia aperta fino alla fine.
Tom Wright,

3

Ho affrontato la tua stessa situazione e quello che ho fatto è stato creare un tipo di post personalizzato chiamato "homepage" e anche creato il plug-in "Limiti di creazione di post di Bainternet" per limitare la creazione di ogni tipo di post per utente. Provalo http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/


Bel approccio semplice. Leggero problema con il post-based - Voglio anche limitare dove si trova la pagina.
Tom Wright,

limite dov'è la pagina? ti interessa spiegare?
Bainternet,

Quindi il problema qui è che voglio avere tutte le pagine degli utenti nello stesso posto. Vale a dire mysite.com/users/bob Plus, voglio anche consentire le sottopagine nello stesso stile: mysite.com/users/bob/mysubpage
Tom Wright

2

Il plug-in User Access Manager farà questo per te, tutti gli altri approcci sono troppo complicati. UAM è semplicissimo, imposta gruppi e assegna il gruppo alle tue sottopagine, pronto.



1

Il sollution implica che hai disabilitato la modifica di tipi di post "normali" (post, pagina).

E ' non è così difficile come si potrebbe credere. La chiave è il nome di accesso dell'utente . Lo stesso potrebbe essere fatto con tassonomie o persino termini.

Vedi quanto segue (c'è anche un esempio per una query):

// 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 le tassonomie questo avrebbe anche più senso, perché potresti interrogare solo i post che sono taggati con termini dalle tassonomie di questi utenti, ma ciò richiederebbe una meta-casella post con i termini di tassonomia degli utenti. La condizione sarebbe la stessa: nome di accesso dell'utente e aggiungerei 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';

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

Il posizionamento del controllo di capacità (current_user_can) potrebbe essere anche altrove. Dipende tutto dalle tue esigenze specifiche. Giusto per accertarsene: questi sono esempi per guidarti sulla strada per un sollution. Spero che aiuti :)


0

Ho fatto qualcosa di simile con "membri", un tipo di post personalizzato e un'assegnazione manuale dei diritti di autore a un membro specifico, dal momento che è un sito Web di piccoli gruppi, ma ricordo di aver letto in qualche thread di supporto stampa amico che è possibile agganciarsi al processo di registrazione, quindi suppongo che sarebbe possibile creare automaticamente un tipo di pagina / post personalizzato per utente al momento dell'iscrizione e assegnare quella pagina specifica al membro appena creato come homepage. Ho anche aggiunto l'editor front-end di Scribu e bloccato il backend ai membri che non sono amministratori. Probabilmente puoi anche aggiungere un reindirizzamento al momento dell'iscrizione 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.

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.