Capacidades de taxonomías personalizadas en WordPress

24 jul 2014, 12:16:31
Vistas: 17.9K
Votos: 10

He registrado varias taxonomías personalizadas para un tipo de entrada personalizado. El código para una de ellas es el siguiente:

$labels = array(
    'name'              => __( 'Género', 'textdomain' ),
    'singular_name'     => __( 'Género', 'textdomain' ),
    'search_items'      => __( 'Buscar Géneros', 'textdomain' ),
    'all_items'         => __( 'Todos los Géneros', 'textdomain' ),
    'parent_item'       => __( 'Género Padre', 'textdomain' ),
    'parent_item_colon' => __( 'Género Padre:', 'textdomain' ),
    'edit_item'         => __( 'Editar Género', 'textdomain' ), 
    'update_item'       => __( 'Actualizar Género', 'textdomain' ),
    'add_new_item'      => __( 'Añadir Nuevo Género', 'textdomain' ),
    'new_item_name'     => __( 'Nuevo Género', 'textdomain' ),
    'menu_name'         => __( 'Géneros', 'textdomain' ),
);
$args = array(
    'labels'            => $labels,
    'public'            => true,
    'show_admin_column' => true,
    'show_ui'           => true,
    'hierarchical'      => true,
    'capabilities'      => array(
        'manage_terms'  => 'edit_posts',
        'edit_terms'    => 'edit_posts',
        'delete_terms'  => 'edit_posts',
        'assign_terms'  => 'edit_posts'
    )
);
register_taxonomy( 'genres', 'book', $args );

Tengo problemas con las capacidades, ya que quiero que una de las taxonomías personalizadas pueda ser gestionada por los autores.

Si defino las capacidades como en el código anterior con 'manage_terms' => 'edit_posts', los autores no pueden añadir nuevos términos a la taxonomía personalizada aunque tengan capacidades de edit_posts.

También he intentado añadir capacidades personalizadas al rol de autor y asignar estas capacidades al registrar la taxonomía personalizada, pero sin éxito.

Lo que sí funciona es añadir 'manage_categories' al rol de autores, pero esta solución no es satisfactoria ya que todas las taxonomías pasan a ser editables por los autores.

Gracias de antemano.

1
Todas las respuestas a la pregunta 3
6

Al igual que las capacidades de los CPT, las de las taxonomías también son personalizables, en register_taxonomy():

capabilities

  • 'manage_terms' - 'manage_categories'
  • 'edit_terms' - 'manage_categories'
  • 'delete_terms' - 'manage_categories'
  • 'assign_terms' - 'edit_posts'

Dado que tus autores solo tienen edit_posts, funciona como observas: pueden asignar términos existentes, pero no crearlos. Puedes personalizar las capacidades para la taxonomía en cuestión y dar la capacidad respectiva a los autores, para que puedan crear términos en ella (pero no en otras taxonomías).

24 jul 2014 12:30:32
Comentarios

@vguerrero no, necesitas ajustar las capacidades para las taxonomías. Las taxonomías y los CPT son cosas claramente diferentes con sus propios conjuntos de capacidades, no puedes manipular ambos solo con la definición del CPT.

Rarst Rarst
24 jul 2014 12:50:40

Si lo estoy entendiendo bien, estás sugiriendo definir las capacidades para el tipo de contenido personalizado como 'capabilites' => array( 'manage_terms' => 'manage_custom_tax', 'edit_terms' => 'manage_custom_tax', 'delete_terms' => 'manage_custom_tax', 'assign_terms' => 'edit_posts') y luego agregar 'manage_custom_tax' al rol de autor. Ya intenté esto antes de abrir este post, y lo he intentado de nuevo, sin éxito. Supongo que no te estoy entendiendo. Agradecería más detalles o un ejemplo. Gracias.

vguerrero vguerrero
24 jul 2014 12:53:52

Perdón, escribí tipo de contenido personalizado pero me refería a taxonomía personalizada.

vguerrero vguerrero
24 jul 2014 13:01:40

@vguerrero sí, eso era lo que estaba sugiriendo y no estoy seguro de por qué no funcionaría en tu caso. Podrías intentar elaborar sobre lo que has probado en tu pregunta.

Rarst Rarst
24 jul 2014 13:08:17

Ok. Esto es de alguna manera embarazoso. Lo siento mucho por esto. Todo fue por un error de ortografía en la palabra "capabilities", y no podía verlo aunque llevaba dos días lidiando con esto. Creo que podría borrar esta publicación porque no tiene ningún interés en absoluto. Disculpen las molestias.

vguerrero vguerrero
24 jul 2014 18:49:11

Tengo un problema con la taxonomía hierarchical' => false, aunque el menú desapareció, el usuario todavía es capaz de crear etiquetas ingresando lo que se le ocurra en el área de etiquetas separadas por comas :/

Fanky Fanky
5 ago 2022 12:34:28
Mostrar los 1 comentarios restantes
0

Cuando defines capacidades al registrar una taxonomía, estás definiendo nuevas capacidades que son equivalentes a las capacidades existentes de manage_terms, edit_terms, delete_terms y assign_terms.

Entonces, deberías hacer algo como esto, ya que tu taxonomía es Genre:

'capabilities' => array(
    'manage_terms' => 'manage_genre',
    'edit_terms' => 'edit_genre',
    'delete_terms' => 'delete_genre',
    'assign_terms' => 'assign_genre',
)

Después de hacer esto, podrás asignar estas capacidades a un rol de usuario. La forma más fácil y mi método preferido es usar un plugin como Capability Manager Enhanced, aunque existen muchos plugins que pueden hacer el trabajo.

14 oct 2016 00:14:00
0

En caso de que alguien llegue aquí buscando modificar una taxonomía previamente registrada, puedes usar el filtro register_taxonomy_args.

add_filter( 'register_taxonomy_args', 'modificar_mi_taxonomia', 20, 2 );
function modificar_mi_taxonomia( $args, $taxonomia ) {
    $capacidades = array(
        'manage_terms' => 'edit_posts',
        'edit_terms'   => 'edit_posts',
        'delete_terms' => 'edit_posts',
        'assign_terms' => 'edit_posts',
    );

    
    if ( 'mi-tax' === $taxonomia ) {
        $args['capabilities'] = $capacidades;
    } 

    return $args;

}
21 nov 2024 22:23:43