Почему моей пользовательской роли WP нужны edit_posts для редактирования изображений?

Это может быть очевидно для кого-то, кроме меня. Я думаю, что я помню, где-то читал, что «образ» действительно является формой «сообщения».

  • У меня есть пользовательский тип сообщения, называемый «листинг»
  • У меня есть пользовательская роль WP для «клиента»

Когда я вошел в систему как «клиент», и я запускаю всплывающее окно, просматриваю изображение, нажимаю «показать», чтобы открыть его, а затем нажмите «отредактировать изображение», я получаю -1. То есть. ничего не отображается, но «-1».

Я могу исправить эту проблему, назначив моей настраиваемой роли возможность «edit_posts». Почему это? Как только я это сделаю, у меня возникает другая проблема, теперь роль пользователя «клиент» имеет доступ к сообщениям, комментариям и amp; инструментов, которые мне не нужны.

Возможно, я не настроил свой собственный тип сообщения правильно с возможностями? Как я могу разрешить «клиенту» редактировать изображения, но не иметь доступа к сообщениям?

      $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 4 J000000Monday11 2011, 16:09:24

2 ответа


0

Если бы мне пришлось угадать: потому что images - Вложения , а Вложения - Post-Type . Таким образом, для редактирования изображения, которое является вложением, которое является сообщением, требуется возможность edit_post.

ИЗМЕНИТЬ

У вас нет ваших ключей /значений массива capability?

например. у вас есть 'edit_posts' => 'edit_listings'. Разве это не должно быть 'edit_listings' => 'edit_posts'?

ответил Chip Bennett 4 J000000Monday11 2011, 17:19:59
6

Я знаю, что этот вопрос уже год, но я только что обнаружил, что на самом деле есть способ достичь этого, поэтому отправляйте его здесь, если он полезен другим людям:

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;

}

Это основано главным образом на этой статье Codex .

Я по-прежнему получаю свои фильтры возможностей, и это 2:04 утра, поэтому мой код может быть улучшен ...

ответил Simon Blackbourn 4 J000000Wednesday12 2012, 05:05:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132