it-swarm.com.de

Die benutzerdefinierte Benutzerrolle kann das vorgestellte Bild nicht sehen oder ändern

Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen Event erstellt und die Unterstützung für vorgestellte Bilder in meiner functions.php-Datei aktiviert, aber meine benutzerdefinierte Benutzerrolle kann das Metafeld für vorgestellte Bilder auf der Bearbeitungsseite für ein Ereignis nicht sehen. Wenn sich ein Benutzer als Administrator anmeldet, wird das Featured Image Meta-Feld ohne Fehler angezeigt.

Hier ist mein Code zur Registrierung des CPT:

add_action('init', 'event_post_init');

function event_post_init() {
  // array of all capabilities for our CPT
  $capabilities = array(
     'publish_posts' => 'publish_events',
     'edit_posts' => 'edit_events',
     'edit_others_posts' => 'edit_others_events',
     'delete_posts' => 'delete_events',
     'delete_published_posts' => 'delete_published_events',
     'delete_others_posts' => 'delete_others_events',
     'read_private_posts' => 'read_private_events',
     'edit_post' => 'edit_event',
     'delete_post' => 'delete_event',
     'read_post' => 'read_event',
   );

   // register the CPT
   register_post_type( 'event',
      array(
         'labels' => array(
            'name' => __('Event')
         ),
         'public' => true,
         'has_archive' => true,
         'show_ui' => true,
         'menu_position' => 8,
         'capability_type' => array('event', 'events'),
         'capabilities' => $capabilities,
         'supports' => array('title', 'thumbnail', 'page-attributes'),
         'map_meta_cap' => true,
         'hierarchical' => true,
      )
   );
}

und so richte ich meine benutzerdefinierte Benutzerrolle ein:

function create_event_admin_role(){
   add_role('event_admin', 'Event Administrator', array(
     'publish_events' => false,
     'edit_events' => true,
     'edit_others_events' => false,
     'delete_events' => false,
     'delete_others_events' => false,
     'read_private_events' => true,
     'edit_published_events' => true,
     'read' => true,
     'assign_terms' => true,
     'edit_terms' => true,
     'manage_terms' => true,
     'read_private_pages' => true
   )
  );
}

Das Seltsame ist, dass wenn ich mir das Markup für die Bearbeitungsseite ansehe, ich das #postimagediv -Element sehe, es aber aus irgendeinem Grund versteckt ist. Hier ist das Markup auf der Seite:

<div class="postbox  hide-if-js" id="postimagediv" style="">
   <div title="Click to toggle" class="handlediv"><br></div>
   <h3 class="hndle ui-sortable-handle"><span>Featured Image</span></h3>
   <div class="inside">
     <p class="hide-if-no-js">
       <a class="thickbox" id="set-post-thumbnail" href="http://example.com/wp-admin/media-upload.php?post_id=662&amp;type=image&amp;TB_iframe=1&amp;width=753&amp;height=294" title="Set featured image">Set featured image</a>
      </p>
    </div>
</div>

und die CSS, die tatsächlich die Meta-Box verbirgt:

#postimagediv {
   display: hidden !important;
}

Beachten Sie, dass ichFeatured Image unter Screen Options aktiviert habe.

Vielleicht sollte ich auch darauf hinweisen, dass ich versucht habe, der obigen Rolle das Privileg upload_files mit dem folgenden Code zu erteilen:

function extend_event_admin_role() {
  $role = get_role('event_admin');

  $role->add_cap('upload_files');
}

Ein weiterer Hinweis ist, dass wenn ich do die Berechtigung upload_files hinzufüge, Featured Image unter Screen Options sichtbar ist und auch andere Meta-Boxen, die Medien unterstützen, eine Schaltfläche Add Media haben, die verschwindet, wenn ich upload_files auf false setze .

 enter image description here 

 enter image description here 

Wenn ich den Code in wp-admin/edit-form-advanced.php ändere, der die Metabox für das vorgestellte Bild hinzufügt, kann ich feststellen, dass es wirklich add_metabox() aufruft:

if ( $thumbnail_support && current_user_can( 'upload_files' ) ):
  add_meta_box('postimagediv', __('Featured Image'), 'post_thumbnail_meta_box', null, 'side', 'low');
  print 'Support for Featured Image';
  exit;
endif;
5
Cyclonecode

Ich habe das Problem schließlich mit einem aktivierten Plugin namens Revisionary aufgespürt. Die Funktion, die für das Ausblenden des Elements postimagediv verantwortlich ist, lautet act_hide_admin_divs und befindet sich in revisionary/admin/admin_rvy.php. Die Funktion dient zum Ausblenden von Metaboxen mit Inhalten, die keine Überarbeitungen unterstützen.

Um das vorgestellte Bild für meine bestimmte Rolle anzuzeigen, habe ich den Filter rvy_hidden_meta_boxes verwendet:

add_filter('rvy_hidden_meta_boxes', 'revisor_show_featured_image_box');

function revisor_show_featured_image_box($unrevisable_css_ids) {
   $key = array_search('postimagediv', $unrevisable_css_ids, true);
   unset($unrevisable_css_ids[$key]);

   return $unrevisable_css_ids;
}
1
Cyclonecode

Benutzer, die nur Ihrer event_admin-Rolle zugewiesen sind, verfügen nicht über die upload_files-Funktion, die zum Anzeigen des featured image meta-Felds erforderlich ist.

Hier ist der relevante Code aus dem Kern:

if ( $thumbnail_support && current_user_can( 'upload_files' ) )    // <-- Notice this check
    add_meta_box( 
        'postimagediv', 
        esc_html( $post_type_object->labels->featured_image ),             
        'post_thumbnail_meta_box', 
        null, 
       'side', 
       'low'
    );

Beachten Sie Folgendes, wenn Sie später versuchen, die Option hinzuzufügen:

'upload_files' => true

bei Ihrem add_role()-Setup wird es möglicherweise nicht aktualisiert, da es in der wp_user_roles-Option zwischengespeichert ist.

Sie müssen daher die Datenbank aktualisieren, um sie anzupassen:

Es kann auch möglich sein, Filter wie user_has_cap zu verwenden, um dies dynamisch anzupassen.

3
birgire

Nach meinem Verständnis benötigen Sie einen benutzerdefinierten Beitragstyp Event + featured_image + Custom Role. Was ich nicht verstehe, sind Ereignisse vom Capability-Typ, es sei denn, Sie passen zu viele Anpassungen an. Was ist hier der Grund für eine solche Anpassung?

Was ich hier getan habe, ist, die Editorrolle in event_amdin mit all ihren Fähigkeiten zu klonen und capacity_type zur Seite zu machen, wenn Sie Seitenattribute in Ihrer Frage verwenden.

Test: Erstellte zwei Benutzer Test als Contributor und Cyclone als Event Administrator und es funktioniert einwandfrei. Bitte geben Sie weitere Informationen zu Ihrem Bedarf an, damit ich diese Antwort aktualisiere. Vielen Dank!

Edit 1 : Code aktualisiert, Edit 1-Start-/Endabschnitt in cloneUserRole -Funktion prüfen.

Happy Coding !!

function cloneUserRole()
{
    global $wp_roles;

    if (!isset($wp_roles))
        $wp_roles = new WP_Roles();

        $editor      = $wp_roles->get_role('editor');
        // Adding a new role with all editor caps.
        $wp_roles->add_role('event_admin', 'Event Administrator', $editor->capabilities);

        // edit 1 start : updated to add cap to new user role
        $event_admin      = $wp_roles->get_role('event_admin');

        $event_admin->add_cap( 'read_event' );
        $event_admin->add_cap( 'delete_event' );
        $event_admin->add_cap( 'edit_event' );
        $event_admin->add_cap( 'read_private_events' );
        $event_admin->add_cap( 'delete_others_events' ); // don't add
        $event_admin->add_cap( 'delete_published_events' );
        $event_admin->add_cap( 'delete_events' ); // don't add
        $event_admin->add_cap( 'edit_others_events' ); // don't add
        $event_admin->add_cap( 'edit_events' );
        $event_admin->add_cap( 'publish_events' ); // don't add
        // edit 1 ends : 

        //echo '<pre>', print_r( $wp_roles, 1), '</pre>';
        //die;
}
add_action('init', 'cloneUserRole');


function stack_event_init() {
    $labels = array(
        'name'               => _x( 'Events', 'post type general name', 'stack' ),
        'singular_name'      => _x( 'Event', 'post type singular name', 'stack' ),
        'menu_name'          => _x( 'Events', 'admin menu', 'stack' ),
        'name_admin_bar'     => _x( 'Event', 'add new on admin bar', 'stack' ),
        'add_new'            => _x( 'Add New', 'event', 'stack' ),
        'add_new_item'       => __( 'Add New Event', 'stack' ),
        'new_item'           => __( 'New Event', 'stack' ),
        'edit_item'          => __( 'Edit Event', 'stack' ),
        'view_item'          => __( 'View Event', 'stack' ),
        'all_items'          => __( 'All Events', 'stack' ),
        'search_items'       => __( 'Search Events', 'stack' ),
        'parent_item_colon'  => __( 'Parent Events:', 'stack' ),
        'not_found'          => __( 'No events found.', 'stack' ),
        'not_found_in_trash' => __( 'No events found in Trash.', 'stack' )
    );

    $args = array(
        'labels'             => $labels,
        'description'        => __( 'Description.', 'stack' ),
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_nav_menus'  => true,
        'show_in_menu'       => true,
        'show_in_admin_bar'  => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'event' ),
        'capability_type'    => 'page',
        'has_archive'        => true,
        'hierarchical'       => true,
        'menu_position'      => null,
        'supports'           => array( 'title', 'thumbnail', 'page-attributes' )
    );

    register_post_type( 'event', $args );
}
add_action('init', 'stack_event_init');

function my_rewrite_flush() {
    stack_event_init();
    flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'my_rewrite_flush' );
  1. Rollen und Fähigkeiten
  2. Art des Registrierungspostens
  3. Flush Rewrite Rules
1
Webloper