O que é uma capacidade de WordPress

Capacidades é o “coração” da gestão de acesso ao WordPress, pois define literalmente o que o utilizador pode ou não fazer. A documentação oficial do WordPress descreve a capacidade como a permissão para executar um ou mais tipos de tarefas e cada utilizador autenticado pode ter pelo menos uma capacidade atribuída directamente ou herdada de uma função ou funções pai.

Lista de todas as capacidades padrão para o núcleo do WordPress pode ser encontrada no artigo Papéis e Capacidades.

Embora a maioria das capacidades sejam auto-explicativas com base no seu nome (edit_posts, manage_options, remove_users, etc.), ainda há muita confusão associada àquilo por que são realmente responsáveis e porque é que mesmo quando o utilizador tem uma certa capacidade atribuída, ele ou ela ainda não está autorizado a executar tarefas antecipadas.

Não há uma boa resposta a esta pergunta, uma vez que muitas das capacidades centrais do WordPress têm excepções. Por exemplo, quando o sítio web é multisite setup e o utilizador não é um super administrador, então mesmo que a capacidade create_users seja concedida, o utilizador não será capaz de criar um novo utilizador; ou a capacidade de gerir_links será ignorada se a opção link_manager_enabled for desligada.

Com base na versão do WordPress 4.9, existem pelo menos 65 excepções definidas no núcleo, por isso não hesite em contactar-me se tiver dificuldades com as capacidades de gestão.

Todas as capacidades baseadas em funções são armazenadas na tabela wp_options com o nome da opção wp_user_roles enquanto as capacidades baseadas no utilizador são armazenadas na tabela wp_usermeta com o nome da meta chave wp_capabilities. O prefixo wp_ pode variar com base no valor da variável global $table_prefix definida no ficheiro wp-config.php.

A lista de capacidades é a matriz associada onde a chave do elemento é a própria capacidade enquanto o valor do elemento é a regra que define se a capacidade é concedida ou negada (1 significa que a capacidade é concedida enquanto 0 – negada).

WordPress Capability List

WordPress tem a função core current_user_can que é utilizada para verificar se o utilizador actualmente ligado tem alguma capacidade, contudo a função desencadeia uma funcionalidade bastante complexa que, em alguns casos, pode retornar um resultado inesperado. Tudo depende de quantos plugins ou tema(s) activos se ligam à função corrente_utilizador_can.

Como foi mencionado acima, algumas capacidades têm excepções que são programticamente definidas na função map_meta_cap. Além disso, qualquer solução de terceiros pode ligar-se ao processo com filtro user_has_cap e escrever por cima do resultado.

A capacidade é considerada como concedida se a regra não contiver valor vazio.

Por favor note! Desde 2011 que só tenho experiência pessoal de poucos casos em que outros plugins foram incorrectamente ligados à função actual_user_can. Portanto, se algo não estiver a funcionar como esperado, é menos provável que esteja relacionado com quaisquer plugins ou temas, mas sim com fugas de conhecimento em excepções de capacidade.

Como funciona realmente a capacidade?

A capacidade em si é inútil, a menos que, seja referenciada no código. Tecnicamente, significa que para que a capacidade funcione, algures no código, deve haver uma verificação programática se o utilizador autenticado tem ou não uma capacidade específica. Cabe a um programador definir que parte do sítio web (de funcionalidade) está protegida com que capacidade.

Nota! Nem tudo no WordPress tem capacidade associada. Por exemplo, não encontrará uma capacidade que seja responsável por mostrar ou ocultar a pesquisa de mensagens acima da lista de mensagens no Backend ou mesmo uma capacidade que restrinja o acesso ao backend.

Para aprender a restringir o acesso a toda a área do backend para utilizadores autenticados, verifique Como bloquear o artigo do backend do WordPress.

Felizmente, muita personalização pode ser feita com ganchos nativos do WordPress, mas isto requer desenvolvimento personalizado. Para mais informações sobre os ganchos do WordPress verifique O que é o gancho do WordPress artigo.

Pode criar uma capacidade personalizada?

Vários plugins ou temas adicionam capacidades personalizadas ao núcleo do WordPress, quer armazenando-os na base de dados, quer registando-os dinamicamente durante o carregamento do sítio web. É difícil dizer qual o caminho correcto, contudo é muito mais difícil gerir o acesso a um sítio web com capacidades acrescentadas dinamicamente, porque apenas determinados plugins ou temas conhecem-nos e controlam quando são registados.

Dynamically added capabilities are typically registered with init hook by modifying the get_current_user()->allcaps public property.

Com o plugin AAM tem todo o conjunto de ferramentas necessárias para gerir o acesso às capacidades do website WordPress para funções ou mesmo para utilizadores individuais. Para mais informações sobre isto, consulte o artigo Como gerir as capacidades do WordPress.

Conclusion

As capacidades do WordPress definem o que os utilizadores podem ou não fazer dentro do sítio web. Tipicamente são concebidas mais para as tarefas Backend e raramente utilizadas para quaisquer funcionalidades Frontend.

A capacidade em si é inútil, a menos que seja suportada no código. Portanto, se não estiver familiarizado com a codificação PHP, consulte o seu programador ou simplesmente contacte-me antes de considerar a criação de quaisquer capacidades personalizadas.