Cómo no permitir a los usuarios crear nuevas etiquetas, sino permitirles usar las existentes

9

Quiero un cierto rol para poder agregar nuevas etiquetas, pero otros usuarios deberían poder usar la barra de texto para buscar etiquetas existentes.

Sé que puedo ocultar la barra de etiquetas en la barra lateral, pero no quiero eso. Solo quiero que diga "Lo siento, esta etiqueta no existe" o algo así cuando alguien ingresa una etiqueta que no existe.

¿Hay un complemento o una función que lo haga por mí?

Jorn Reuvers
fuente

Respuestas:

10

Puede conectarse pre_insert_term, verificar la taxonomía y si el usuario tiene o no el rol especificado de la siguiente manera:

function disallow_insert_term($term, $taxonomy) {

    $user = wp_get_current_user();

    if ( $taxonomy === 'post_tag' && in_array('somerole', $user->roles) ) {

        return new WP_Error(
            'disallow_insert_term', 
            __('Your role does not have permission to add terms to this taxonomy')
        );

    }

    return $term;

}

add_filter('pre_insert_term', 'disallow_insert_term', 10, 2);

Esto evitará que el usuario inserte nuevos términos, pero les permitirá buscar y agregar términos existentes a una publicación.

Tenga en cuenta que cuando está en la pantalla de edición posterior, un usuario puede ingresar un nombre de término que no existe y presionar enter o hacer clic en el botón Agregar que agregará el término al DOM; sin embargo, en este punto, el término no se agrega a la base de datos hasta que el usuario publica o actualiza la publicación, momento en el cual el término será rechazado.

Adán
fuente
Hola, gracias por la ayuda :) He intentado esto, pero no pareció hacer nada. Seré honesto y diré que probablemente es mi culpa. Copié y pegué su código en mis funciones y, por supuesto, cambié el bit 'somerole'. Aún es posible agregar etiquetas para ese rol.
Jorn Reuvers
¿Cuál es el rol de usuario que está tratando de evitar? ¿También está tratando de evitar etiquetas para la taxonomía correcta, en este caso post_tagy no alguna otra taxonomía como categorieso alguna taxonomía personalizada?
Adam
Estoy tratando de evitar que el rol de editor lo haga en este momento. Y es la taxonomía estándar (por lo que debería ser post_tag), todavía no he creado nada más, ya que todavía estoy probando.
Jorn Reuvers
Es hora de comenzar a depurar entonces. En wp-config.phpconjunto las siguientes constantes, define('WP_DEBUG', true);, define('WP_DEBUG_LOG', true);, y define('WP_DEBUG_DISPLAY', false);luego en la función fragmento anterior, ingrese una llamada a error_log($taxonomy);y otra llamada a error_log(implode(', ', $user->roles));continuación, añadir una etiqueta a continuación, actualizar el post, esto creará un debug.logarchivo en el wp-contentdirectorio. Debe determinar si se llama o no a esta función y si ingresa o no correctamente la declaración condicional porque esta devolución de llamada funciona para mí.
Adam