it-swarm.com.de

Schränken Sie die Ansicht benutzerdefinierter Beitragstypen nach Benutzerrolle ein

Ich habe einen benutzerdefinierten Beitragstyp und einige benutzerdefinierte Benutzerrollen erstellt und möchte die Ansicht des Beitragstyps basierend auf den spezifischen Rollen einschränken können.

Gibt es eine einfache Möglichkeit, dies einzuschränken?

2
Brob

Jede Rolle hat Fähigkeiten.

Hier ist ein einfacher Beitrag zu unserem Bestreben: (Er schreibt und bearbeitet nur)

add_role('contributor', 'Contributor', array(
    'read' => true,
    'edit_posts' => true,
    'delete_posts' => false,
));

Jetzt hat er eine neue Fähigkeit (er kann Beiträge anderer Leute bearbeiten)

function add_capability()
{
    $role = get_role('contributor');
    $role->add_cap('edit_others_posts');
}
add_action('admin_init', 'add_capability');

Fügen Sie nun seine neuen Funktionen für unseren neuen Beitragstyp hinzu. Zuerst erstellen wir den Beitragstyp:

function create_myposttype()
{
    register_post_type(
        'myposttype',
        array(
            'public' => true,
            'capability_type' => 'myposttype',
            'capabilities' => array(
                'publish_posts' => 'publish_myposttypes',
                'edit_posts' => 'edit_myposttypes',
                'edit_others_posts' => 'edit_others_myposttypes',
                'read_private_posts' => 'read_private_myposttypes',
                'edit_post' => 'edit_myposttype',
                'delete_post' => 'delete_myposttype',
                'read_post' => 'read_myposttype',
            ),
        )
    );
}
add_action('init', 'create_myposttype');

Der Beitragstyp wird erstellt, der Beitragende hat jedoch keine Berechtigung. Geben wir ihm etwas Saft:

function add_capability()
{
    $role = get_role('contributor');
    $role->add_cap('read_myposttype');
    $role->add_cap('edit_myposttypes');
    $role->add_cap('delete_myposttype', false); // to be sure
}
add_action('admin_init', 'add_capability');

Die Funktionen read_post und read_ * stellen sicher, dass der Benutzer mit dieser zugewiesenen Rolle diesen aktuellen Bereich nicht sehen und darauf zugreifen kann. Er wird diesen allgemeinen Wordpress-Fehler bekommen:

Sie haben keine ausreichenden Berechtigungen, um auf diese Seite zuzugreifen

Und machen wir, dass unsere Autoren (diese Standardrolle) die myposttype Posts nicht sehen können:

function remove_author_capability()
{
    $role = get_role('author');
    $role->add_cap('read_myposttype', false);
}
add_action('admin_init', 'remove_author_capability');

Denken Sie daran, aufzuräumen:

function add_roles_on_activation() // add roles on activation
{
    add_role('contributor', 'Contributor', array(
        'read' => true,
        'edit_posts' => true,
        'delete_posts' => false,
    ));
}
register_activation_hook(__FILE__, 'add_roles_on_activation');

function add_roles_removal()  // we clean up after ourselves
{
    remove_role('contributor');
}
register_deactivatin_hook(__FILE__, 'add_roles_removal');

Jetzt, wenn Sie nur Sachen aus dem Menü entfernen möchten (sie trotzdem per URL zugänglich machen), ist hier, wie:

Von der Admin-Leiste (das oben schwebende kleine Menü):

function my_edit_adminbar($wp_admin_bar)
{
    if(current_user_can('read_myposttype'))
        $wp_admin_bar->remove_node('new-myposttype');
}
add_action('admin_bar_menu', 'my_edit_adminbar');

Aus dem Menü:

function my_edit_menu()
{
    if(current_user_can('read_myposttype'))
    {
        $slug = 'edit.php?post_type=myposttype';
        remove_menu_page($slug);
    }
}
add_action('admin_menu', 'my_edit_menu');
3
aifrim

Hier erfahren Sie zunächst, wie Sie die aktuelle Benutzerrolle ermitteln können.

<?php 

// Get the current user id
$user_id = get_current_user_id(); 

// Get the user data based on this id
// returned in an arryay
$user_data = new WP_User( $user_id );


// We could echo out the first role item 
// in the array like this...   
echo $user->roles[0];


// Or we could print the full
// array like this 
print_r($user->roles);

?> 

Jetzt könnten wir die obigen Daten verwenden, um eine einfache if-Anweisung in den Vorlagen zu konstruieren. Dies hängt davon ab, was Sie erreichen möchten, aber ...

<?php 

$user_roll = $user->roles[0];
if($user_roll =="administrator") {

    // Code here will only be run if current
    // user is an admin
}
?> 

Du verstehst, worum es geht;)

0
Edd Smith

Nun, ich sehe keinen Code, also weiß ich nicht, ob Sie den benutzerdefinierten Beitragstyp selbst erstellt oder ein Plugin verwendet haben. Ich gehe davon aus, dass Sie den benutzerdefinierten Beitragstyp in functions.php erstellt haben. Dort können Sie mit einer if-Anweisung prüfen, ob der Benutzer über bestimmte Funktionen verfügt.

<?php current_user_can( $capability, $args ); ?>

Es wäre wirklich hilfreich, wenn Sie Code posten könnten, damit ich ein konkretes Beispiel dafür geben kann.

http://codex.wordpress.org/Function_Reference/current_user_can

0
gdaniel