Хорошо, я ищу лучший способ атаковать это.
Я очень хорошо разбираюсь в PHP и создаю пользовательские типы записей с помощью настраиваемых мета-полей в WordPress.
Вот что я собираюсь сделать:
- Пользователь регистрируется и устанавливается на подписчика по умолчанию.
- Пользователь запрашивает у администратора разрешение на произвольный тип записи.
- Администратор назначает пользователю другое имя разрешения, например «Владелец магазина».
- Теперь пользователь может видеть пользовательский тип сообщения и может вносить записи в этот тип сообщения.
- Пользователь может видеть и редактировать только свой собственный пост.
Мне нужна помощь в следующем:
- Как создать новую «Роль» под названием «Владелец магазина»,
- Как дать правильное разрешение указанной роли, чтобы видеть и иметь доступ только к пользовательскому типу сообщений.
- Разрешить пользователю просматривать и редактировать свои собственные сообщения только в этом пользовательском типе сообщений.
В идеале я бы предпочел, чтобы все это делалось из wp-admin, но я предполагаю, что мне может понадобиться создать интерфейс для этого, чтобы получить конечный контроль, который мне нужен.
Любой вклад приветствуется.
С уважением
Используйте плагин Justin Tadlock « Members ». Это дает вам возможность создавать новые роли и редактировать существующие роли, а также добавлять пользовательские возможности. Всю ту работу, которую вам нужно будет сделать, можно сократить до нескольких кликов.
Я знаю, что вы сказали в своем комментарии к ответу ZaMoose, что «хочете написать функциональность самостоятельно, чтобы у меня был полный контроль над всем». Это упускает из виду весь смысл программного обеспечения с открытым исходным кодом. Джастин Тэдлок выпустил свой плагин, чтобы вы могли использовать его именно так, чтобы у вас был полный контроль над всем.
Если вы действительно действительно хотите изобрести велосипед, потенциально тратя сотни часов вашего собственного времени, я не могу вас остановить, но вы можете, по крайней мере, избавить себя от проблем и использовать плагин Tadlock, чтобы узнать, как делать то, что вы хотите.
Если у вас есть плагин, который делает то, что вы хотите, вам нужно будет изменить
'map_meta_cap'
флаг наtrue
и'capability_type'
флаг в вашей функции регистрации типа сообщения, чтобы он говорил что-то другое, кроме «сообщение», «страница» или любое другое «зарезервировано». тип. Затем продублируйте все возможности, связанные с сообщениями (напримерedit_posts
,edit_others_posts
,publish_posts
, и т. д.), используя ваш тип возможностей вместо сообщений. Обязательно назначьте все эти разрешения администраторам (вы не сможете увидеть тип сообщения, пока не сделаете это), затем создайте свою роль, имитируя возможности роли «участника» для вашего типа сообщения.Например, предположим, что ваш тип возможностей был
foobars
, вы хотели бы предоставить «владельцам магазинов» возможностиedit_foobars
,delete_foobars
иread
. Таким образом, они могут создавать свои собственные черновики foobars и удалять эти черновики, но, поскольку у них нетpublish_foobars
возможностей, они должны отправить их на утверждение. Поскольку у них нетedit_published_foobars
, все модификации утвержденного foobar должны быть одобрены.Хорошо, теперь я использую плагин Members, чтобы получить представление о том, как работают разрешения для участников. Я установил
'map_meta_cap' => true
и'capability_type' => 'shopowner'
для своего пользовательского типа сообщения. Я создал новую роль с именемShopOwner
и дал ей возможности чтения, редактирования_магазина, удаления_магазина. Назначьте пользователю роль ShopOwner и войдите в систему с этим пользователем. Этот пользователь не может видеть пользовательский тип записи. Я что-то пропустил?измените их на
edit_shopowners
иdelete_shopowners
.edit_shopowner
иdelete_shopowner
являются мета-возможностями, которые на самом деле никогда не проверяются. Они проверяются, когда кто-то пытается отредактировать или удалить определенный элемент, и в конечном итоге проверяют такие вещи, как «Может ли этот пользователь удалять эти типы элементов? Могут ли они удалять только свои собственные или чужие? Могут ли они удалять опубликованные элементы?» и т.п.Я не мог понять этого… но я получил функциональность, которая мне нужна, установив возможности в моем пользовательском типе сообщений и создав эти возможности в плагине для участников. Я наградил вас ответами, так как ваш пост был для меня наиболее полезным, чтобы собрать решение воедино. Спасибо
хм… я немного запутался, какая разница между 2 и 3 строками? :S Разве это не добавляет те же возможности к роли «Владелец магазина»?
Да, они одинаковы, но они показывают разные способы сделать это, первый включает роль в качестве первого параметра (Владелец магазина), второй — просто шапку, поскольку он использует $role.
Вы должны переводить возможность/разрешение? это __(»);
@SvetoslavMarinov Я отредактировал ответ, чтобы удалить перевод.
@dashaluna Я отредактировал ответ, чтобы уточнить его.
Спасибо за ответ, но это не то, что я ищу. В основном потому, что это плагины. Я хочу сам написать функциональность, чтобы иметь полный контроль над всем.
Тип сообщения регистрации имеет параметр под названием «возможности», поэтому вы можете, например,
http://codex.wordpress.org/Function_Reference/register_post_type
Чтобы создать нового пользователя/роль/возможность, вы можете использовать add_role, add_cap в качестве простого примера для начала работы:
Рассматривали ли вы возможность использования Gravity Forms или TDO Mini Forms для фактической отправки контента? У каждого из них есть функциональные возможности, которые помогут вам разумно обрабатывать пользовательский контент.
Этого можно добиться более простым и эффективным способом, установив плагин под названием «Advance Access Manager». Вам не нужно будет писать функциональность, но вы все равно будете иметь приличный уровень контроля над пользователями, ролями и тем, что они могут делать. Большинство вещей, которые вы хотите, могут быть достигнуты с помощью этого плагина.
Я знаю, что это довольно угловой случай, но мне потребовался час, чтобы понять это.
У меня был включен плагин: WP Custom Admin Interface, где вы можете настроить меню администратора для конкретных пользователей. Если вы регистрируете пользовательский тип сообщения после включения и настройки меню, то в «Пользовательском интерфейсе администратора» >> «Меню администратора» есть кнопка, которая называется «Добавить недавно добавленные элементы меню». Затем нажмите «Сохранить», и если пункт меню доступен для этого типа пользователя, то после этого он будет работать.