Există vreo modalitate (un plugin?) de a restricționa un utilizator să editeze doar o singură pagină?

13 sept. 2010, 13:32:20
Vizualizări: 17K
Voturi: 9

Folosim WordPress ca un CMS și am dori să permitem utilizatorilor să aibă o "pagină de start". În mod ideal, am dori să îi împiedicăm să modifice întregul site.

Există o modalitate simplă de a limita drepturile de editare ale utilizatorilor la o singură pagină?

În prezent folosesc plugin-ul Members pentru alte funcționalități bazate pe permisiuni, așa că ar fi ideal dacă o soluție s-ar integra bine cu acesta sau l-ar înlocui complet.

Bonus pentru crearea automată a unei pagini de start când este creat un nou utilizator.


ACTUALIZARE: Trebuie să clarific că aceste pagini trebuie să fie limitate la o anumită zonă a site-ului (adică toate copiii aceleiași pagini). De asemenea, după discuții cu utilizatorii, pare că le-ar fi util să poată crea subpagini care să se ramifice din pagina lor de start.

0
Toate răspunsurile la întrebare 8
0

O instalare de bază a WordPress probabil nu va face exact ceea ce doriți. Ați putea configura o instanță multi-site și permiteți utilizatorilor să aibă propriul lor 'sub' site, sau să folosiți ceva precum BuddyPress sau Mingle care au o funcționalitate de profil utilizator.

15 sept. 2010 00:15:18
2

Îmi pare rău că trebuie să fac asta, dar am dat peste răspuns pe forumurile WordPress.

Se pare că Role Scoper face acest lucru foarte bine. Autorul acelui post de forum a spus-o cel mai bine:

Pentru a permite unui utilizator să editeze o anumită pagină, dar nimic altceva:

  1. Acordați-i un rol WordPress de Abonat
  2. Gestionare > Pagini > Editați pagina lor
  3. Extindeți fila "Editori" din sub "Opțiuni Avansate"
  4. Bifați caseta de selectare fără acolade din stânga numelui utilizatorului (dacă vor fi create pagini copil, bifați și caseta cu acolade {[]}, care atribuie rolul pentru toate paginile copil actuale sau viitoare)
  5. Salvați Pagina
29 ian. 2011 14:18:30
Comentarii

Sună ca un proces manual. Dar dacă ai mii de utilizatori?

MikeSchinkel MikeSchinkel
29 ian. 2011 22:16:12

Este cu siguranță adevărat, dar este cea mai apropiată soluție până acum. Voi păstra recompensa deschisă până la final.

Tom Wright Tom Wright
30 ian. 2011 13:59:26
3

Am întâmpinat aceeași situație ca tine și ceea ce am făcut a fost să creez un tip de postare personalizat numit "pagina principală" și, de asemenea, am creat plugin-ul "Bainternet Posts Creation Limits" pentru a limita crearea fiecărui tip de postare per utilizator. Încearcă-l http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

29 ian. 2011 13:59:20
Comentarii

Abordare simplă și drăguță. Mică problemă cu faptul că este bazată pe postări - vreau de asemenea să limitez unde se află pagina.

Tom Wright Tom Wright
30 ian. 2011 14:04:16

limitezi unde se află pagina? poți să explici?

Bainternet Bainternet
30 ian. 2011 16:05:18

Deci problema aici este că vreau să am toate paginile utilizatorilor în același loc. Adică mysite.com/users/bob În plus, vreau să permit și subpaginile în același stil: mysite.com/users/bob/mysubpage

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

Plugin-ul User Access Manager va face asta pentru tine, toate celelalte abordări sunt mult prea complicate. UAM este pur și simplu ușor, configurează grupuri și atribuie grupul subpaginilor tale, gata.

2 aug. 2012 23:46:59
0

Aș folosi Capability Manager sau aș verifica rolurile și capabilitățile în codex pentru a face acest lucru.

14 sept. 2010 01:18:31
0

Soluția presupune că ai dezactivat editarea tipurilor de postări "normale" (post, page).

Nu este atât de greu pe cât ai putea crede. Cheia este numele de utilizator (user login name). Același lucru s-ar putea face și cu taxonomiile sau chiar termenii.

Vezi următorul exemplu (există și un exemplu pentru query):

// 1st: Adaugă un tip de postare pentru acel utilizator cu 
//   numele său de utilizator și capacitățile corespunzătoare
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' );

// Un query ar putea fi făcut astfel:
wp_reset_query(); // pentru a fi siguri

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();
        // verifică parola
        if ( post_password_required() ) :
            the_content();
        elseif ( !current_user_can('') ) :
            // afișează un mesaj decent aici
            return;
        else :

            // aici vine conținutul tău

        endif;
    endwhile;

else : // altfel; nicio postare
    printf(__( 'Nimic de la Dl./Dna. %1$s până acum.', TEXTDOMAIN ), $current_user->user_firstname.' '.$current_user->user_lastname);
endif; // endif; have_posts();

wp_rewind_posts(); // pentru un al doilea query

Cu taxonomii, acest lucru ar avea și mai mult sens, deoarece ai putea interoga doar postările care sunt etichetate cu termeni din taxonomiile acestui utilizator, dar asta ar necesita o cutie meta pentru postări cu termenii taxonomiei utilizatorului. Condiția ar fi aceeași: numele de utilizator și ai adăuga doar taxonomia:

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

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

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

        // Înregistrează
        register_taxonomy ( 
             $current_user->user_login
            ,array ( 'post', 'page' )
            ,$args
        ); 
        // Adaugă la tipul de postare
        // poți adăuga chiar și tipul de postare al utilizatorului curent aici
        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' );

Poziționarea verificării capacității (current_user_can) ar putea fi și în altă parte. Totul depinde de nevoile tale specifice. Doar pentru a fi siguri: Acestea sunt exemple care te ghidează pe drumul către o soluție. Sper că te ajută :)

4 feb. 2011 02:59:25
0

Am făcut ceva similar cu "membri", un tip de postare personalizată, și o atribuire manuală a drepturilor de autor pentru un membru specific, deoarece este un site web pentru un grup mic, dar îmi amintesc că am citit pe un forum de suport BuddyPress că este posibil să modifici procesul de înscriere. Presupun că ar fi posibil să creezi automat o pagină/tip de postare personalizată pentru fiecare utilizator la înscriere și să atribui acea pagină specifică noului membru ca pagină de pornire. De asemenea, am adăugat editorul front-end al lui Scribu și am blocat accesul la backend pentru membrii care nu sunt administratori. Probabil că poți adăuga și o redirecționare la înscriere, astfel încât noii membri să fie direcționați către pagina lor (care, presupun, ar putea avea un conținut implicit).

Voi încerca să găsesc acel fir de discuție din suportul BuddyPress.

Adendum - există o eroare în selectorul de autor din câmpul de editare a postării. În prezent, nu utilizează sistemul standard de permisiuni, ceea ce poate face soluția cu membri mai dificilă (deși probabil va funcționa dacă autorul este atribuit la crearea paginii). Există un patch în Trac, dar nu cred că a fost încorporat în nucleul principal încă.

31 ian. 2011 08:32:19
0

acest lucru este posibil cu plugin-ul s2member, versiunea gratuită este suficientă. Am creat o zonă de clienți unde fiecare client are un URL există un tutorial video aici: http://www.primothemes.com/forums/viewtopic.php?f=4&t=586&start=0&hilit=client+area

1 feb. 2011 11:50:44