Это может быть очевидно кому-то, кроме меня. Кажется, я где-то читал, что «изображение» — это действительно форма «поста».
- У меня есть настраиваемый тип сообщения под названием «листинг».
- У меня есть пользовательская роль WP «клиент»
Когда я вхожу в систему как «клиент» и запускаю всплывающее окно мультимедиа, нахожу изображение, нажимаю «показать», чтобы открыть его, а затем нажимаю «редактировать изображение», я получаю -1. Т.е. ничего не отображается, кроме «-1».
Я могу решить эту проблему, назначив моей пользовательской роли возможность «edit_posts». Почему это? Как только я это делаю, меня мучает другая проблема: роль пользователя «клиент» теперь имеет доступ к сообщениям, комментариям и инструментам, которые мне не нужны.
Возможно, я неправильно настроил свой пользовательский тип записи с возможностями? Как я могу разрешить «клиенту» редактировать изображения, но не иметь доступа к сообщениям?
$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
);
Вот возможности, которые я назначаю своей пользовательской роли WordPress на случай, если кто-нибудь что-то заметит
delete_listing
delete_listings
delete_published_listings
edit_listing
edit_listings
edit_published_listings
publish_listing
publish_listings
read
read_listing
upload_files
. И мне, похоже, также нужно следующее для редактирования и удаления изображений. Думал, что они будут переназначены на edit_listings и delete_listings.edit_posts
delete_posts
Я нашел следующий пост, который я сейчас изучаю. Кажется, это более серьезная проблема, чем я думал, где требуется edit_posts. Похоже, существует общая проблема при использовании настраиваемых типов сообщений + настраиваемых ролей + таксономий wordpress.org/support/topic/…
В моей пользовательской настройке типа сообщения выше я переназначил edit_posts на edit_listings, и пользовательской роли wordpress назначено «edit_listings». Я думал, что это и было целью их переназначения, может я ошибался?
См. редактирование в обновленном ответе.
Беннетт, я поменял их местами, но, похоже, это не оказало никакого влияния, и мне все еще нужны edit_posts, чтобы иметь возможность редактировать изображение. Все равно показывает -1 без него. Первоначально я следовал приведенному ниже примеру Джастина Тэдлока «настройка вашего пользовательского типа сообщений», где у него есть _posts слева и переназначенные возможности справа. justintadlock.com/archives/2010/07/10/…
После некоторого времени работы с пользовательскими типами постов, ролями и возможностями я понял, что понимаю их гораздо лучше. Вы были правы, изображение — это сообщение, поэтому для того, чтобы пользователь мог редактировать загруженное изображение, ему необходимо
edit_posts
. Чтобы они удалили изображение, им нужноdelete_posts
. Однако не уверен, почему мойedit_listings
не правильно сопоставилedit_posts
.Это сработало для меня. Просто примечание, в первой строке кода есть лишний «)». В моем случае, поскольку я использую плагин, чтобы показывать людям только их собственные загрузки, все, что мне нужно, это оператор if, чтобы проверить, что это вложение.
рад, что это полезно для вас — теперь я удалил постороннюю скобку, спасибо, что заметили это.
Если бы мне пришлось угадывать: потому что изображения — это Attachments, а Attachments — это Post-Type. Таким образом, для редактирования изображения, которое является вложением или сообщением, требуется
edit_post
возможность.РЕДАКТИРОВАТЬ
Разве у вас нет
capability
перевернутых ключей/значений массива сопоставления?например у вас есть
'edit_posts' => 'edit_listings'
. Разве это не должно быть вместо этого'edit_listings' => 'edit_posts'
?Я знаю, что этому вопросу уже год, но я только что обнаружил, что на самом деле есть способ добиться этого, поэтому опубликуйте его здесь на случай, если он будет полезен другим людям:
Это основано главным образом на этой статье Кодекса.
Я все еще обдумываю фильтры возможностей, и сейчас 2:04, так что мой код вполне можно улучшить…