Soporte » Guías – Resolución de problemas » roles para un custom post type

  • Estoy creando un custom post type y necesito crear un perfil de usuario que solo pueda editar sus post, ni publicar nuevos, ni editar otros. Este es el código que estoy usando:

    function create_custom_post_type_patrocinadores() {
    
        $labels = array(
            'name'                  => _x( 'Patrocinadores', 'Post Type General Name', 'text_domain' ),
            'singular_name'         => _x( 'Patrocinador', 'Post Type Singular Name', 'text_domain' ),
            'menu_name'             => __( 'Patrocinadores', 'text_domain' ),
            'name_admin_bar'        => __( 'Patrocinadores', 'text_domain' ),
            'archives'              => __( 'Archivo de Patrocinadores', 'text_domain' ),
            'attributes'            => __( 'Atributos de Patrocinadores', 'text_domain' ),
            'parent_item_colon'     => __( 'Patrocinador padre:', 'text_domain' ),
            'all_items'             => __( 'Todos los patrocinadores', 'text_domain' ),
            'add_new_item'          => __( 'Añadir nuevo patrocinador', 'text_domain' ),
            'add_new'               => __( 'Añadir nuevo', 'text_domain' ),
            'new_item'              => __( 'Nuevo patrocinador', 'text_domain' ),
            'edit_item'             => __( 'Editar patrocinador', 'text_domain' ),
            'update_item'           => __( 'Actualizar patrocinador', 'text_domain' ),
            'view_item'             => __( 'Ver patrocinador', 'text_domain' ),
            'view_items'            => __( 'Ver patrocinadores', 'text_domain' ),
            'search_items'          => __( 'Buscar patrocinador', 'text_domain' ),
            'not_found'             => __( 'No se encontró', 'text_domain' ),
            'not_found_in_trash'    => __( 'No se encontró en la papelera', 'text_domain' ),
            'featured_image'        => __( 'Imagen de la empresa', 'text_domain' ),
            'set_featured_image'    => __( 'Poner imagen de la empresa', 'text_domain' ),
            'remove_featured_image' => __( 'Eliminar imagen de la empresa', 'text_domain' ),
            'use_featured_image'    => __( 'Usar como imagen de la empresa', 'text_domain' ),
            'insert_into_item'      => __( 'Insertar en el patrocinador', 'text_domain' ),
            'uploaded_to_this_item' => __( 'Actualizo a este patrocinador', 'text_domain' ),
            'items_list'            => __( 'Lista de patrocinadores', 'text_domain' ),
            'items_list_navigation' => __( 'Navegación de la lista de patrocinadores', 'text_domain' ),
            'filter_items_list'     => __( 'filtrar lista de patrocinadores', 'text_domain' ),
        );
        $args = array(
            'label'                 => __( 'Patrocinador', 'text_domain' ),
            'description'           => __( 'Páginas de patrocinadores', 'text_domain' ),
            'labels'                => $labels,
            'supports'=> array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'genesis-seo'),
            'taxonomies'            => array( 'post_tag' ),
            'hierarchical'          => true,
            'public'                => true,
            'show_ui'               => true,
            'show_in_menu'          => true,
            'menu_position'         => 8,
            'show_in_admin_bar'     => true,
            'show_in_nav_menus'     => true,
            'can_export'            => true,
            'has_archive'           => true,        
            'exclude_from_search'   => true,
            'publicly_queryable'    => true,
            'map_meta_cap' => false,
            'capability_type' => array('patrocinador','patrocinadores'),
            'menu_icon'           => 'dashicons-admin-page',
            'rewrite' => array('slug' => 'patrocinador'),
            'capabilities' => array(
                'create_post' => 'create_patrocinador',
                'publish_posts' => 'publish_patrocinadores',
                'Edit_posts' => 'edit_patrocinadores',
                'Edit_others_posts' => 'edit_others_patrocinadores',
                'delete_posts' => 'delete_patrocinadores',
                'delete_others_posts' => 'delete_others_patrocinadores',
                'read_private_posts' => 'read_private_patrocinadores',
                'edit_post' => 'edit_patrocinadores',
                'delete_post' => 'delete_patrocinadores',
                'read_posts' => 'read_patrocinadores',
                'manage_tag' => 'manage_patrocinador_tag',
            ),
        'has_archive' => true,
    
        );
    
        register_post_type( 'patrocinadores', $args );
    }
    add_action( 'init', 'create_custom_post_type_patrocinadores' );

    Si clono el perfil de autor y añado los permisos de edición de patrocinadores no hay problema, pero cuando le quito los permisos de los post no permite entrar en el administrador para editar eso.
    No sé muy bien como dar permisos para eso específicamente.

Viendo 1 respuesta (de 1 total)
  • Moderador José Arcos

    (@josearcos)

    Hola @melenas1414, disculpa la demora en contestar. Puede que el problema esté en que no estés añadiendo las capacidades personalizadas del CPT al rol. Si estás creando un rol nuevo llamado co_author por ejemplo, tendrías que añadir el siguiente código:

    function add_theme_caps() {
        // gets the administrator role
        $co_author = get_role( 'co_author' );
    
        $co_author->add_cap( 'create_patrocinador' ); 
        $co_author->add_cap( 'publish_patrocinadores' ); 
        // Resto de capcadidades
    }
    add_action( 'admin_init', 'add_theme_caps');
    

    Espero te sirva, saludos.

    • Esta respuesta fue modificada hace 2 años, 10 meses por José Arcos.
Viendo 1 respuesta (de 1 total)
  • El debate ‘roles para un custom post type’ está cerrado a nuevas respuestas.