2017-04-19 4 views
0

Ich habe eine Mitgliederverzeichnis Website und brauche etwas Hilfe.Machen WP Metabox nur für Administratoren editierbar

Ich habe eine Taxonomie, die mit einem benutzerdefinierten Beitragstyp in Wordpress verknüpft ist. So kann ich für jeden Beitrag eine geografische Region angeben. Das Problem ist, dass jedes Mitglied, das Zugriff auf einen bestimmten Beitrag hat, auch Zugriff auf die Region hat. Ich möchte die Region metabox nur für Administrator-Rollen editierbar machen. Hier ist der aktuelle Code:

function region() { 

$labels = array(
    'name'      => _x('Regions', 'Taxonomy General Name', 'text_domain'), 
    'singular_name'    => _x('Region', 'Taxonomy Singular Name', 'text_domain'), 
    'menu_name'     => __('Regions', 'text_domain'), 
    'all_items'     => __('All Items', 'text_domain'), 
    'parent_item'    => __('Parent Item', 'text_domain'), 
    'parent_item_colon'   => __('Parent Item:', 'text_domain'), 
    'new_item_name'    => __('New Item Name', 'text_domain'), 
    'add_new_item'    => __('Add New Item', 'text_domain'), 
    'edit_item'     => __('Edit Item', 'text_domain'), 
    'update_item'    => __('Update Item', 'text_domain'), 
    'view_item'     => __('View Item', 'text_domain'), 
    'separate_items_with_commas' => __('Separate items with commas', 'text_domain'), 
    'add_or_remove_items'  => __('Add or remove items', 'text_domain'), 
    'choose_from_most_used'  => __('Choose from the most used', 'text_domain'), 
    'popular_items'    => __('Popular Items', 'text_domain'), 
    'search_items'    => __('Search Items', 'text_domain'), 
    'not_found'     => __('Not Found', 'text_domain'), 
); 
$args = array(
    'labels'      => $labels, 
    'hierarchical'    => true, 
    'public'      => true, 
    'show_ui'     => true, 
    'show_admin_column'   => true, 
    'map_meta_cap'    => false,  
    'show_in_nav_menus'   => true, 
    'show_tagcloud'    => true, 
); 
register_taxonomy('region', array('installer'), $args); 

} add_action ('Init', 'Region', 0);

Ich habe versucht, 'show_ui' zu false zu ändern, aber das verbirgt es auch von den Admins. Ich weiß, dass es eine einfache Lösung geben muss, aber ich finde es nicht.

+0

Was passiert, wenn Sie den 'show_ui' Parameter zu einer booleschen Variable machen und am Anfang der Funktion etwas wie $ $ show_ui = (current_user_can ('administrator')? True: false);' –

Antwort

0

Danke, Ty, dass Sie mich in die richtige Richtung weisen. Ich habe eine if/else-Anweisung hinzugefügt, die den Trick zu tun scheint. Siehe unten:

function region() { 

$labels = array(
    'name'      => _x('Regions', 'Taxonomy General Name', 'text_domain'), 
    'singular_name'    => _x('Region', 'Taxonomy Singular Name', 'text_domain'), 
    'menu_name'     => __('Regions', 'text_domain'), 
    'all_items'     => __('All Items', 'text_domain'), 
    'parent_item'    => __('Parent Item', 'text_domain'), 
    'parent_item_colon'   => __('Parent Item:', 'text_domain'), 
    'new_item_name'    => __('New Item Name', 'text_domain'), 
    'add_new_item'    => __('Add New Item', 'text_domain'), 
    'edit_item'     => __('Edit Item', 'text_domain'), 
    'update_item'    => __('Update Item', 'text_domain'), 
    'view_item'     => __('View Item', 'text_domain'), 
    'separate_items_with_commas' => __('Separate items with commas', 'text_domain'), 
    'add_or_remove_items'  => __('Add or remove items', 'text_domain'), 
    'choose_from_most_used'  => __('Choose from the most used', 'text_domain'), 
    'popular_items'    => __('Popular Items', 'text_domain'), 
    'search_items'    => __('Search Items', 'text_domain'), 
    'not_found'     => __('Not Found', 'text_domain'), 
); 
if (current_user_can('administrator')){ 
    $args = array(
    'labels'      => $labels, 
    'hierarchical'    => true, 
    'public'      => true, 
    'show_ui'     => true, 
    'show_admin_column'   => true, 
    'map_meta_cap'    => false,  
    'show_in_nav_menus'   => true, 
    'show_tagcloud'    => true, 
); 
}else{ 
    $args = array(
    'labels'      => $labels, 
    'hierarchical'    => true, 
    'public'      => true, 
    'show_ui'     => false, 
    'show_admin_column'   => true, 
    'map_meta_cap'    => false,  
    'show_in_nav_menus'   => true, 
    'show_tagcloud'    => true, 
); 
} 
register_taxonomy('region', array('installer'), $args); 

} 
add_action('init', 'region', 0); 

Und dann ‚ich gerade geändert show_ui_ von true in false abhängig von Admin vs Nicht-Admin-Rollen. Wenn jemand einen einfacheren Weg sieht, würde ich es gerne sehen.

Verwandte Themen