Como não permitir que os usuários criem novas tags, mas permita que eles usem as existentes

9

Quero que uma determinada função seja capaz de adicionar novas tags, mas outros usuários devem poder usar a barra de texto para procurar por tags existentes.

Sei que posso ocultar a barra de tags na barra lateral, mas não quero isso. Eu só quero que ele diga "Desculpe, essa tag não existe" ou algo quando alguém digita uma tag que não existe.

Existe um plugin ou uma função que fará isso por mim?

Jorn Reuvers
fonte

Respostas:

10

Você pode conectar-se pre_insert_term, verificar a taxonomia e se o usuário tem ou não a função especificada da seguinte maneira:

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);

Isso impedirá que o usuário insira novos termos, mas permitirá que ele pesquise e adicione termos existentes a uma postagem.

Lembre-se de que, quando na tela de pós-edição, um usuário pode digitar um nome de termo que não existe e pressionar enter ou clicar no botão Adicionar, que adicionará o termo ao DOM; no entanto, nesse ponto, o termo não será adicionado ao banco de dados até que o o usuário publica ou atualiza a postagem em que o termo não será permitido.

Adão
fonte
Oi, obrigado pela ajuda :) Eu tentei isso, mas não pareceu fazer nada. Vou ser sincero e dizer que provavelmente é minha culpa. Copiei colei seu código em minhas funções e, é claro, mudei o bit 'somerole'. Ainda é possível adicionar tags para essa função.
Jorn Reuvers
Qual é a função do usuário que você está tentando impedir? Além disso, você está tentando impedir tags para a taxonomia correta, neste caso, post_tage não em alguma outra taxonomia como categoriesou em alguma taxonomia personalizada?
Adam
Estou tentando impedir que a função de editor faça isso no momento. E é a taxonomia padrão (portanto, deve ser post_tag). Ainda não criei mais nada, pois ainda estou testando.
Jorn Reuvers
Hora de começar a depurar então. Em wp-config.phpdefinir as seguintes constantes, define('WP_DEBUG', true);, define('WP_DEBUG_LOG', true);, e define('WP_DEBUG_DISPLAY', false);, em seguida, na função trecho acima, ingresse uma chamada para error_log($taxonomy);e outra chamada para error_log(implode(', ', $user->roles));, em seguida, adicionar uma marca, em seguida, atualizar o post, então isso irá criar um debug.logarquivo no wp-contentdiretório. Você precisa determinar se essa função está sendo chamada ou não e se está inserindo a instrução condicional corretamente, porque esse retorno de chamada funciona para mim.
Adam