it-swarm.com.de

Warum macht mein Brauch WP Rolle Brauchen Sie edit_posts, um Bilder zu bearbeiten?

Dies kann für andere als mich selbst offensichtlich sein. Ich denke, ich erinnere mich, dass ich irgendwo gelesen habe, dass ein "Bild" tatsächlich eine Form von "Post" ist.

  • Ich habe einen benutzerdefinierten Beitragstyp namens "Auflistung".
  • Ich habe eine benutzerdefinierte WP Rolle als "Client"

Wenn ich als "Client" angemeldet bin und das Medien-Popup starte, zu einem Bild navigiere, auf "Anzeigen" klicke, um es zu öffnen, und dann auf "Bild bearbeiten" klicke, erhalte ich eine -1. Dh es wird nichts anderes angezeigt als "-1".

Ich kann dieses Problem beheben, indem ich meiner benutzerdefinierten Rolle die Funktion "edit_posts" zugebe. Warum ist das? Sobald ich dies tue, habe ich ein anderes Problem. Die Benutzerrolle "Client" hat nun Zugriff auf Posts, Kommentare und Tools, die ich nicht möchte.

Vielleicht habe ich meinen benutzerdefinierten Beitragstyp mit den Funktionen nicht richtig eingerichtet? Wie kann ich dem "Kunden" erlauben, die Bilder zu bearbeiten, aber keinen Zugriff auf Beiträge zu haben?

      $args = array(
    'label' => 'Listing',
    'description' => '',
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'show_in_nav_menus' => true,
    'map_meta_cap' => true,
    'capability_type' => 'listing',
    'capabilities' => array(
                    'edit_post' => 'edit_listing',
                    'read_post' => 'read_listing',
                    'delete_post' => 'delete_listing',
                    'edit_posts' => 'edit_listings',
                    'edit_others_posts' => 'edit_others_listings',
                    'publish_posts' => 'publish_listings',
                    'read_private_posts' => 'read_private_listings',
                    'delete_posts' => 'delete_listings',
                    'delete_private_posts' => 'delete_private_listings',
                    'delete_published_posts' => 'delete_published_listings',
                    'delete_others_posts' => 'delete_others_listings',
                    'edit_private_posts' => 'edit_private_listings',
                    'edit_published_posts' => 'edit_published_listings',
                ),
    'menu_position' => 5, 
    'hierarchical' => false,
    'has_archive' => false, 
    'rewrite' => array('slug' => 'listing'), 
    'query_var' => true,
    'supports' => array('title'),
    'labels' => $labels
  ); 
7
Andrew

Wenn ich raten müsste: denn Bilder sind Anhänge und Anhänge sind ein Post-Typ . Um ein Bild zu bearbeiten, bei dem es sich um einen Anhang handelt, bei dem es sich um einen Beitrag handelt, ist daher die Funktion edit_post erforderlich.

EDIT

Haben Sie Ihre capability Zuordnung Array-Schlüssel/Werte nicht umgekehrt?

z.B. du hast 'edit_posts' => 'edit_listings'. Sollte es nicht stattdessen 'edit_listings' => 'edit_posts' sein?

0
Chip Bennett

Ich weiß, dass diese Frage jetzt ein Jahr alt ist, aber ich habe gerade herausgefunden, dass es tatsächlich eine Möglichkeit gibt, dies zu erreichen. Posten Sie sie hier, falls sie für andere nützlich ist:

add_filter( 'user_has_cap', 'my_user_has_cap', 10, 3 );

function my_user_has_cap( $user_caps, $req_cap, $args ) {

    $post = get_post( $args[2] );

    if ( 'attachment' != $post->post_type )
        return $user_caps;

    if ( 'delete_post' == $args[0] ) {

        if ( $user_caps['delete_others_posts'] )
            return $user_caps;

        if ( !isset( $user_caps['delete_others_listings'] ) or !$user_caps['delete_others_listings'] )
            return $user_caps;

        $user_caps[$req_cap[0]] = true;

    }

    if ( 'edit_post' == $args[0] ) {

        if ( $user_caps['edit_others_posts'] )
            return $user_caps;

        if ( !isset( $user_caps['edit_others_listings'] ) or !$user_caps['edit_others_listings'] )
            return $user_caps;

        $user_caps[$req_cap[0]] = true;

    }

    return $user_caps;

}

Dies basiert hauptsächlich auf diesem Codexartikel .

Ich bekomme immer noch Filter für die Fähigkeiten und es ist 2:04 Uhr morgens, so dass mein Code möglicherweise verbesserungsfähig ist ...

6