Помогите решить задачу. Нужно создать отдельную сущность (новый тип поста) при активации плагина.
Пусть новая сущность называется new_product.
При активации плагина должна создаваться новая capability, пусть new_cap, и добавить эту capability к роли Administrator.
Новый раздел с новым типом (new_product) может видеть только администратор с новой capability.
Как создавать новую capability? Разве add_cap() для этого подойдёт?
По идее add_cap() добавляет только существующие capability, а как нужно создать и добавить новую capability?
Правильно, add_cap() не подойдет. Для того, чтобы создавать новые возможности и роли пользователей, проще всего воспользоваться плагином User Roles and Capabilities.
Можно добавить такой код в functions.php
function custom_add_cap() {
$custom_cap = 'kagg_cap';
$min_cap = 'activate_plugins'; // Смотрите роли в codex
$grant = true;
foreach ( $GLOBALS['wp_roles']->role_objects as $role_obj )
{
if ( (! $role_obj->has_cap( $custom_cap ))
&& ($role_obj->has_cap( $min_cap )) ) {
$role_obj->add_cap( $custom_cap, $grant );
}
}
}
add_action( 'init', 'custom_add_cap' );
На этапе инициализации вызывается функция, которая добавляет новую возможность. Для примера новая возможность названа kagg_cap. Функция проверяет все существующие роли, сравнивает с некой минимальной возможностью (в примере - activate_plugins), и добавляет новую возможность во все роли, где есть минимальная.
Перечень ролей и возможностей, а также таблицу соответствия можно посмотреть в codex.
Проверить, что роли и возможности установлены, можно таким кодов в functions.php
function action_footer(){
var_dump($GLOBALS['wp_roles']->role_objects);
var_dump($GLOBALS['wp_roles']->role_objects['administrator']);
var_dump($GLOBALS['wp_roles']->role_objects['administrator']->has_cap('activate_plugins'));
var_dump(current_user_can( 'administrator'));
var_dump(current_user_can( 'activate_plugins'));
var_dump(current_user_can( 'kagg_cap'));
var_dump(current_user_can( 'kagg1_cap'));
}
add_action( 'wp_footer', 'action_footer' );
Поскольку kagg1_cap мы не создавали, последняя строка выведет false.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Подскажите как проще сделать замену массивов в многомерном массиве