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.
post_tag
e não em alguma outra taxonomia comocategories
ou em alguma taxonomia personalizada?wp-config.php
definir as seguintes constantes,define('WP_DEBUG', true);
,define('WP_DEBUG_LOG', true);
, edefine('WP_DEBUG_DISPLAY', false);
, em seguida, na função trecho acima, ingresse uma chamada paraerror_log($taxonomy);
e outra chamada paraerror_log(implode(', ', $user->roles));
, em seguida, adicionar uma marca, em seguida, atualizar o post, então isso irá criar umdebug.log
arquivo nowp-content
diretó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.