Почему моей пользовательской роли 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
);
2 ответа
Если бы мне пришлось угадать: потому что images - Вложения , а Вложения - Post-Type . Таким образом, для редактирования изображения, которое является вложением, которое является сообщением, требуется возможность edit_post
.
ИЗМЕНИТЬ
У вас нет ваших ключей /значений массива capability
?
например. у вас есть 'edit_posts' => 'edit_listings'
. Разве это не должно быть 'edit_listings' => 'edit_posts'
?
Я знаю, что этот вопрос уже год, но я только что обнаружил, что на самом деле есть способ достичь этого, поэтому отправляйте его здесь, если он полезен другим людям:
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 утра, поэтому мой код может быть улучшен ...