Restricționare tip postare personalizată doar pentru rolul de administrator

12 iun. 2012, 14:00:51
Vizualizări: 15.7K
Voturi: 20

Cum pot elimina acest tip de postare personalizată din panoul de control pentru utilizatorii ne-administratori?

/* Adăugare tip postare personalizată pentru Website-uri */
add_action( 'init', 'create_website_type' );
function create_website_type() {

    register_post_type( 'website',
        array(
            'labels' => array(
                'name' => __( 'Websites' ),
                'singular_name' => __( 'Website' ),
                'add_new' => __( 'Adaugă Website Nou' ),
                'add_new_item' => __( 'Adaugă Website Nou' ),
                'edit' => __( 'Editează Website' ),             
                'edit_item' => __( 'Editează Website' ),                
                'new_item' => __( 'Adaugă Website Nou' ),              
                'view' => __( 'Vezi Website' ),         
                'view_item' => __( 'Vezi Website' ),                    
                'search_items' => __( 'Caută Website-uri' ),  
                'not_found' => __( 'Nu s-au găsit Website-uri' ),
                'not_found_in_trash' => __( 'Nu s-au găsit Website-uri în Coșul de Gunoi' ),                                         
            ),
            'description' => __('Website-uri de afișat în secțiunea Resurse.'),
            'public' => true,
            'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'menu_position' => 20,
            'supports' => array('title', 'editor'),
            'can_export' => true        
        )
    ); 
    remove_post_type_support('website','editor'); 
}
0
Toate răspunsurile la întrebare 2
7
21

register_post_type() acceptă un parametru capabilities în argumentele sale. Consultați get_post_type_capabilities() pentru valorile posibile. Din comentarii:

În mod implicit, sunt acceptate șapte chei ca parte a array-ului de capabilități:

  • edit_post, read_post și delete_post sunt meta-capabilități, care sunt apoi mapate în general la capabilități primitive corespunzătoare în funcție de context, care ar fi articolul editat/citit/șters și utilizatorul sau rolul verificat. Prin urmare, aceste capabilități nu ar fi acordate în mod direct utilizatorilor sau rolurilor.

  • edit_posts - Controlează dacă obiectele acestui tip de postare pot fi editate.

  • edit_others_posts - Controlează dacă obiectele de acest tip deținute de alți utilizatori pot fi editate. Dacă tipul de postare nu acceptă un autor, atunci se va comporta ca edit_posts.
  • publish_posts - Controlează publicarea obiectelor acestui tip de postare.
  • read_private_posts - Controlează dacă obiectele private pot fi citite.

Aceste patru capabilități primitive sunt verificate în nucleu în diverse locații. Există, de asemenea, încă șapte alte capabilități primitive care nu sunt referite direct în nucleu, cu excepția map_meta_cap(), care ia cele trei meta-capabilități menționate mai sus și le traduce în una sau mai multe capabilități primitive care trebuie apoi verificate împotriva utilizatorului sau rolului, în funcție de context.

  • read - Controlează dacă obiectele acestui tip de postare pot fi citite.
  • delete_posts - Controlează dacă obiectele acestui tip de postare pot fi șterse.
  • delete_private_posts - Controlează dacă obiectele private pot fi șterse.
  • delete_published_posts - Controlează dacă obiectele publicate pot fi șterse.
  • delete_others_posts - Controlează dacă obiectele deținute de alți utilizatori pot fi șterse. Dacă tipul de postare nu acceptă un autor, atunci se va comporta ca delete_posts.
  • edit_private_posts - Controlează dacă obiectele private pot fi editate.
  • edit_published_posts - Controlează dacă obiectele publicate pot fi editate.

Aceste capabilități suplimentare sunt folosite doar în map_meta_cap(). Prin urmare, ele sunt atribuite în mod implicit doar dacă tipul de postare este înregistrat cu argumentul 'map_meta_cap' setat la true (valoarea implicită este false).

În argumentele de înregistrare adăugați:

'capabilities' => array(
    'edit_post'          => 'update_core',
    'read_post'          => 'update_core',
    'delete_post'        => 'update_core',
    'edit_posts'         => 'update_core',
    'edit_others_posts'  => 'update_core',
    'delete_posts'       => 'update_core',
    'publish_posts'      => 'update_core',
    'read_private_posts' => 'update_core'
),
12 iun. 2012 14:28:08
Comentarii

Cum ai face același lucru, dar permițând administratorilor și editorilor să acceseze CPT-ul?

urok93 urok93
12 iul. 2013 02:54:52

@drtanz Acordă-le ambilor o capabilitate personalizată și filtrează user_has_cap. Vezi acest răspuns pentru un exemplu.

fuxia fuxia
12 iul. 2013 02:58:00

Aș putea face la fel cum ai sugerat, dar să folosesc capabilitatea manage_links (partajată între administratori și editori) în loc de update_core?

urok93 urok93
12 iul. 2013 03:00:05

@drtanz Da, dar aș folosi o capabilitate personalizată. Managerul de linkuri va fi eliminat în cele din urmă, și nu știi ce se va întâmpla cu capabilitățile atribuite atunci.

fuxia fuxia
12 iul. 2013 03:01:59

Am încercat să folosesc manage_categories dar am primit erori, încercam să găsesc niște capabilități unice pentru editori și administratori de pe http://codex.wordpress.org/Roles_and_Capabilities#Capability_vs._Role_Table

urok93 urok93
12 iul. 2013 03:36:26

Dacă optez pentru o capabilitate personalizată, știu cum să adaug capabilitatea, dar nu sunt sigur ce fel de filtrare este necesară pentru scopul de a ascunde elementele de meniu legate de CPT.

urok93 urok93
12 iul. 2013 03:39:40

Notă despre update_core; Doar administratorii instalațiilor cu un singur site au această capacitate. În Multisite, doar Super Admin are această abilitate.

numediaweb numediaweb
9 mar. 2014 21:27:40
Arată celelalte 2 comentarii
0
-1

Pentru administratorii de site-uri multiple, se poate utiliza următorul cod în functions.php:

/* Adaugă tipul personalizat de postare Website */

function create_website_CustomPostType() {

    register_post_type( 'website',
        array(
            'labels' => array(
                'name' => __( 'Site-uri web' ),
                'singular_name' => __( 'Site web' ),
                'add_new' => __( 'Adaugă site nou' ),
                'add_new_item' => __( 'Adaugă site nou' ),
                'edit' => __( 'Editează' ),             
                'edit_item' => __( 'Editează site' ),                
                'new_item' => __( 'Site nou' ),              
                'view' => __( 'Vizualizează' ),         
                'view_item' => __( 'Vizualizează site' ),                    
                'search_items' => __( 'Caută site-uri' ),  
                'not_found' => __( 'Niciun site găsit' ),
                'not_found_in_trash' => __( 'Niciun site în coșul de gunoi' ),                                         
            ),
            'description' => __('Site-uri web care vor fi afișate în secțiunea Resurse.'),
            'public' => true,
            'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'menu_position' => 20,
            'supports' => array('title', 'editor'),
            'can_export' => true        
        )
    ); 
}

 // dacă utilizatorul este logat ca administrator, afișează tipul de postare personalizat, altminteri nu
add_action( 'init', function(){
     $WhatRoleUserLoginNow= wp_get_current_user()->caps;
     $StatusAdmin=$WhatRoleUserLoginNow['administrator'] ?? null;

     if( $StatusAdmin) {
          create_website_CustomPostType();
             }
 

} );

Codul de mai sus adaugă un tip personalizat de postare pentru toți administratorii în modul multisite și pentru super administratori, ascunzând și interzicând accesul pentru alte roluri de utilizatori precum autor, editor, etc.

25 iul. 2023 15:33:40