Как создать новое разрешение для пользовательских типов записей для выполнения конкретных задач

Вопрос или проблема

Мне нужно создать новые разрешения с доступом:

Post_Type_A (Пользовательский тип записи): Доступ к типу контента Post_Type_A
Post_Type_B (Пользовательский тип записи): Доступ к типу контента Post_Type_B

Я новичок в WordPress и не знаю, с чего начать. Если кто-то сможет направить меня, буду признателен.

С уважением

Посмотрите следующий код-

add_action( 'admin_init', 'the_dramatist_add_role_caps', 999 );
function the_dramatist_add_role_caps() {
    // Добавьте роли, которым вы хотите управлять пользовательскими типами записей
    $roles = array( 'editor', 'administrator' );

    // Перебираем каждую роль и назначаем возможности
    foreach($roles as $the_role) {

        $role = get_role($the_role);

        $role->add_cap( 'read' );
        $role->add_cap( 'read_{Post_Type_A_Name}' ); // То же самое для Post_Type_B
        $role->add_cap( 'read_private_{Post_Type_A_Name}s' ); // То же самое для Post_Type_B
        $role->add_cap( 'edit_{Post_Type_A_Name}' ); // То же самое для Post_Type_B
        $role->add_cap( 'edit_{Post_Type_A_Name}s' ); // То же самое для Post_Type_B
        $role->add_cap( 'edit_others_{Post_Type_A_Name}s' ); // То же самое для Post_Type_B
        $role->add_cap( 'edit_published_{Post_Type_A_Name}s' ); // То же самое для Post_Type_B
        $role->add_cap( 'publish_{Post_Type_A_Name}s' ); // То же самое для Post_Type_B
        $role->add_cap( 'delete_others_{Post_Type_A_Name}s' ); // То же самое для Post_Type_B
        $role->add_cap( 'delete_private_{Post_Type_A_Name}s' ); // То же самое для Post_Type_B
        $role->add_cap( 'delete_published_{Post_Type_A_Name}s' ); // То же самое для Post_Type_B

    }
}

Таким образом, вы можете добавить разрешения для любых ролей пользователя.

Если вы хотите создать новую роль для пользователя, который должен получить разрешение, создайте новую роль, как показано ниже-

function add_the_dramatist_role() {
    add_role('the_dramatist_role',
             'The Dramatist Role',
             array(
                 'read' => true,
                 'edit_posts' => false,
                 'delete_posts' => false,
                 'publish_posts' => false,
                 'upload_files' => true,
             )
    );
}
// Помните, это должно быть вызвано в основном файле плагина.
register_activation_hook( __FILE__, 'add_the_dramatist_role' );

Затем добавьте the_dramatist_role в предыдущую функцию переменной $roles в the_dramatist_add_role_caps вот так-

$roles = array( 'the_dramatist_role', 'editor', 'administrator' );

Теперь у the_dramatist_role будут все эти привилегии.

Надеюсь, это поможет.

Ответ или решение

Для создания новых разрешений для пользовательских типов записей в WordPress, которые позволят выполнять определенные задачи, вам нужно предпринять следующие шаги. Все действия описаны с учетом вашего минимального опыта работы с WordPress. Давайте разберемся по порядку.

Формирование концепции (F – Focus)

Перед началом важно понять, что WordPress предоставляет возможности для добавления и изменения ролей и разрешений. Пользовательские типы записей, такие как Post_Type_A и Post_Type_B, представляют собой контентные типы, которые требуют специальных разрешений для доступа, редактирования, публикации и удаления.

Рассмотрение настроек (O – Overview)

  1. Создание необходимых привилегий:
    Чтобы обеспечить нужный доступ к вашим пользовательским типам записей, необходимо определить, какие именно действия доступны для пользователей с определенной ролью. Это может включать чтение, редактирование, публикацию и удаление записей.

  2. Определение ролей:
    Согласно вашему описанию, вы хотите добавить разрешения для ролей editor и administrator. Если вам нужна отдельная роль, вы можете создать её.

Эксперименты с кодом (R – Research)

add_action( 'admin_init', 'the_dramatist_add_role_caps', 999 );
function the_dramatist_add_role_caps() {
    // Определяем роли
    $roles = array( 'editor', 'administrator', 'the_dramatist_role' );

    // Названия пользовательских типов записей
    $custom_post_types = array('Post_Type_A', 'Post_Type_B');

    foreach($roles as $the_role) {
        $role = get_role($the_role);

        foreach ($custom_post_types as $cpt) {
            $role->add_cap( 'read_' . $cpt );
            $role->add_cap( 'read_private_' . $cpt . 's' );
            $role->add_cap( 'edit_' . $cpt );
            $role->add_cap( 'edit_' . $cpt . 's' );
            $role->add_cap( 'edit_others_' . $cpt . 's' );
            $role->add_cap( 'edit_published_' . $cpt . 's' );
            $role->add_cap( 'publish_' . $cpt . 's' );
            $role->add_cap( 'delete_' . $cpt );
            $role->add_cap( 'delete_private_' . $cpt . 's' );
            $role->add_cap( 'delete_published_' . $cpt . 's' );
        }
    }
}

Создание роли (E – Experiment)

Если вам требуется создать новую роль, выполните следующий код:

function add_the_dramatist_role() {
    add_role('the_dramatist_role', 'The Dramatist Role', array(
        'read' => true,
        'edit_posts' => false,
        'delete_posts' => false,
        'publish_posts' => false,
        'upload_files' => true,
    ));
}

register_activation_hook( __FILE__, 'add_the_dramatist_role' );

Заключение и оптимизация (S – Systematize)

Теперь вы знаете, как настроить роли и разрешения для пользовательских типов записей. При изменениях или добавлении новых типов записей просто обновите массив $custom_post_types. Этот процесс обеспечит системное распределение прав доступа и упростит управление вашим WordPress сайтом.

Обратная связь (T – Test)

После применения изменений убедитесь, что функциональность работает корректно, создав нескольких пользователей с различными назначениями и протестировав выполнение разрешенных действий. Это позволит выявить недочеты и внести необходимые правки.

Надеюсь, эти шаги помогут вам организовать доступ к пользовательским типам записей в соответствии с вашими требованиями. Удачи в развитии вашего WordPress проекта!

Оцените материал
Добавить комментарий

Капча загружается...