пере-регистрировать пользовательский тип записи с пользовательскими возможностями

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

Я создал пользовательский тип записи, как ниже.

register_post_type( 'connector',
    array(
        'labels' => array(
            'name' => __( 'Соединители' ),
            'singular_name' => __( 'Соединитель' ),
            'all_items' => __( 'Все соединители' ),
            'add_new' => __( 'Добавить соединитель' ),
            'add_new_item' => __( 'Добавить новый соединитель' ),
            'edit' => __( 'Редактировать'),
            'edit_item' => __( 'Редактировать соединитель' ),
            'new_item' => __( 'Новый соединитель'),
            'view' => __( 'Просмотреть соединитель'),
            'view_item' => __( 'Просмотреть соединитель'),
            'search_items' => __( 'Искать соединители'),
            'not_found' => __( 'Соединители не найдены' ),
            'not_found_in_trash' => __( 'Соединители не найдены в корзине' ),
            'parent' => __( 'Родительский соединитель')
        ),      

    'description' => __( 'Здесь вы можете добавить новые соединители' ),
    'public' => true,
    'show_ui' => true,
    'capability_type' => 'page',        
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'hierarchical' => true,
    'rewrite' => array( 'slug' => 'connector', 'with_front' => false ),
    'query_var' => true,
    'supports' => array( 'title', 'editor', 'thumbnail', 'comments', 'excerpt','author',/*, 'page-attributes'*/ ),
    'taxonomies' => array('post_tag'), // это ВАЖНО для добавления тегов
    'has_archive' => true,
    'show_in_nav_menus' => true,
    'show_in_menu'=>false
    )
);

и затем использовал на своем сайте, имея большое количество авторов.

Теперь я хочу добавить пользовательские возможности к своему пользовательскому типу записи – ‘connector’. Я следовал ответу из Изменить пользовательский тип записи на иерархический после регистрации

function modify_connectors() {
    if ( post_type_exists( 'connector' ) ) {

$capabilities = array(
        'publish_posts' => 'publish_connectors',
        'edit_posts' => 'edit_connectors',
        'edit_others_posts' => 'edit_others_connectors',
        'delete_posts' => 'delete_connectors',
        'delete_others_posts' => 'delete_others_connectors',
        'read_private_posts' => 'read_private_connectors',
        'edit_post' => 'edit_connector',
        'delete_post' => 'delete_connector',
        'read_post' => 'read_connector',
    );

    global $wp_post_types, $wp_rewrite;
    $wp_post_types['connector']->hierarchical = true;
    $wp_post_types['connector']->capability_type="connector";
    $wp_post_types['connector']->capabilities = $capabilities;
    //С этого момента я не уверен, делаю ли я правильно или нет
    $args = $wp_post_types['connector'];
    $wp_rewrite->add_rewrite_tag("%connector%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type=connector&name=");
    add_post_type_support('connector','page-attributes');
    }
}
add_action( 'init', 'modify_connectors', 1 );

Я не нахожу никаких пользовательских возможностей в меню “Редактор ролей пользователей”, связанных с соединителем. Возможно ли добавить пользовательские возможности после завершения регистрации типа записи?

Вы пробовали что-то подобное:

'description' => __( 'Здесь вы можете добавить новые соединители' ),
'public' => true,
'show_ui' => true,
'capability_type' => 'page',        
'publicly_queryable' => true,
'exclude_from_search' => false,
'hierarchical' => true,
'capabilities'        => array(
'publish_posts'       => 'update_core',
'edit_others_posts'   => 'update_core',
'delete_posts'        => 'update_core',
'delete_others_posts' => 'update_core',
'read_private_posts'  => 'update_core',
'edit_post'           => 'edit_posts',
'delete_post'         => 'update_core',
'read_post'           => 'edit_posts',
),
'rewrite' => array( 'slug' => 'connector', 'with_front' => false ),
'query_var' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'comments', 'excerpt','author',/*, 'page-attributes'*/ ),
'taxonomies' => array('post_tag'), // это ВАЖНО для добавления тегов
'has_archive' => true,
'show_in_nav_menus' => true,
'show_in_menu'=>false
));

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

Чтобы перерегистрировать пользовательский тип записи в WordPress с добавлением пользовательских возможностей, необходимо учитывать несколько важных аспектов. Рассмотрим, как это сделать на практике, основываясь на предоставленном вами примере.

1. Регистрация пользовательского типа записи

Сначала выделим ваш первоначальный код для регистрации пользовательского типа записи connector. Он выглядит следующим образом:

register_post_type( 'connector',
    array(
        'labels' => array(
            'name' => __( 'Connectors' ),
            'singular_name' => __( 'Connector' ),
            // Другие метки...
        ),
        'description' => __( 'This is where you can add new Connectors' ),
        'public' => true,
        'show_ui' => true,
        'capability_type' => 'page',        
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'hierarchical' => true,
        'rewrite' => array( 'slug' => 'connector', 'with_front' => false ),
        'query_var' => true,
        'supports' => array( 'title', 'editor', 'thumbnail', 'comments', 'excerpt', 'author' ),
        'taxonomies' => array('post_tag'),
        'has_archive' => true,
        'show_in_nav_menus' => true,
        'show_in_menu' => false
    )
);

2. Изменение возможностей пользовательского типа записи

Теперь, когда у нас есть зарегистрированный тип записи, мы можем добавить пользовательские возможности. Это делается с использованием глобальной переменной $wp_post_types и изменения свойств вашего типа записи.

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

function modify_connectors() {
    if ( post_type_exists( 'connector' ) ) {
        $capabilities = array(
            'publish_posts' => 'publish_connectors',
            'edit_posts' => 'edit_connectors',
            'edit_others_posts' => 'edit_others_connectors',
            'delete_posts' => 'delete_connectors',
            'delete_others_posts' => 'delete_others_connectors',
            'read_private_posts' => 'read_private_connectors',
            'edit_post' => 'edit_connector',
            'delete_post' => 'delete_connector',
            'read_post' => 'read_connector',
        );

        global $wp_post_types;
        $post_type = $wp_post_types['connector'];
        $post_type->capability_type = 'connector';
        $post_type->capabilities = $capabilities;

        // Включение поддержки атрибутов страниц
        add_post_type_support( 'connector', 'page-attributes' );
    }
}
add_action( 'init', 'modify_connectors', 1 );

3. Проверка и назначение возможностей

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

4. Перезагрузка пермалинков

После изменения возможностей всегда полезно обновить структуру постоянных ссылок в админ-панели WordPress. Для этого:

  1. Перейдите в раздел "Настройки" -> "Постоянные ссылки".
  2. Нажмите кнопку "Сохранить изменения" без изменения каких-либо настроек.

Это действие сбросит правила перезаписи и поможет избежать проблем с доступностью ваших пользовательских типов записей.

Заключение

Перерегистрация пользовательского типа записи с добавлением пользовательских возможностей – это мощный инструмент в WordPress. Однако важно помнить, что изменения должны быть осторожно протестированы, чтобы избежать конфликтов или ошибок. Используйте данный пример как руководство и адаптируйте его под ваши нужды. Надеюсь, что данный ответ поможет вам эффективно регулировать доступ к вашим пользовательским типам записей.

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

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