Вопрос или проблема
У меня есть пользовательские типы записей, которые я хотел бы сделать доступными для редактирования несколькими пользователями. Я создал один пользовательский тип записи, используя плагин Toolset. wp_update_post
позволяет нам установить только одного автора:
$user_id = array();
$userIds = get_field("agency_to_author",$_POST['post_ID']); // Получить несколько пользователей с помощью поля acf.
foreach ($userIds as $key => $value) {
$user_id[] = $value['ID'];
}
if(!empty($user_id)){
$arg = array(
'ID' => $_POST['post_ID'],
'post_author' => $user_id,
);
wp_update_post( $arg );
}
Простой способ: используйте этот плагин https://wordpress.org/plugins/user-role-editor/
Более сложный способ: вы можете использовать functions.php, чтобы добавить все пользовательские возможности для определенных ролей. Но, конечно, вам нужно знать названия этих возможностей.
Этот код полезен, если вы хотите добавить X одинаковых возможностей для X ролей.
Добавьте в functions.php
function wphm_add_custom_capabilities_to_roles($roles, $capabilities) {
foreach($roles as $the_role) {
$role = get_role($the_role);
foreach($capabilities as $capability) {
$role -> add_cap($capability);
}
}
}
wphm_add_custom_capabilities_to_roles(
array( // эти роли получат возможности
'custom_user_role_wphm_support',
'administrator'
),
array( // возможности
"read_wphm_custom",
"read_private_wphm_custom",
"edit_wphm_custom",
"edit_others_wphm_custom",
"edit_published_wphm_custom",
"publish_wphm_custom",
"delete_others_wphm_custom",
"delete_private_wphm_custom",
"delete_published_wphm_custom"
)
);
Чтобы удалить возможность с помощью этого цикла, просто измените строку $role -> add_cap($capability); на $role -> remove_cap($capability)
Ответ или решение
Если встала необходимость присвоения нескольким авторам прав на редактирование одного пользовательского типа записи в WordPress, существует несколько подходов для решения данной задачи. Рассмотрим их подробнее в контексте использования WordPress и плагина Toolset.
Проблема:
Функция wp_update_post
позволяет установить только одного автора для записи. Однако если необходимо, чтобы несколько пользователей могли редактировать один и тот же пользовательский пост, стандартных возможностей WordPress будет недостаточно. Рассмотрим способы расширения этой функциональности.
Способы решения:
-
Использование плагина User Role Editor:
Самый простой способ — использование плагина User Role Editor. Данный плагин позволит вам настроить пользовательские роли таким образом, чтобы несколько пользователей получили возможность редактирования нужного типа записи. Вы можете создать отдельную роль с необходимыми правами и назначить эту роль нескольким пользователям. -
Добавление пользовательских прав через functions.php:
Этот метод сложнее, но более гибок. Вы можете задать пользовательские возможности для определённых ролей через файлfunctions.php
вашей темы.function wphm_add_custom_capabilities_to_roles($roles, $capabilities) { foreach($roles as $the_role) { $role = get_role($the_role); foreach($capabilities as $capability) { $role->add_cap($capability); } } } wphm_add_custom_capabilities_to_roles( array( 'custom_user_role_wphm_support', 'administrator' ), array( "read_wphm_custom", "read_private_wphm_custom", "edit_wphm_custom", "edit_others_wphm_custom", "edit_published_wphm_custom", "publish_wphm_custom", "delete_others_wphm_custom", "delete_private_wphm_custom", "delete_published_wphm_custom" ) );
Данный код добавляет определённые возможности (например, редактирование, публикация) указанным ролям. Используя модификации данного скрипта, вы можете как назначать, так и удалять права путем замены
add_cap
наremove_cap
.
Вывод:
Для реализации возможности редактирования одного пользовательского типа записи несколькими авторами в WordPress, рекомендуется использовать комбинированный подход: установка плагина для быстрой настройки прав и его дополнение собственной логикой через functions.php
для более тонкой настройки. Это позволит вам создать гибкую систему управления правами, соответствующую уникальным требованиям вашего проекта.
Этот подход обеспечивает оптимизацию работы редакторов сайта, увеличивает производительность за счет гибкости и безопасности, и, соответственно, отвечает всем современным требованиям к управлению контентом в WordPress.