Fiquei surpreso ao descobrir que add_role () modifica o banco de dados e falha se a função já existir. Existem duas implicações aqui, uma mais séria que a outra: 1) se você estiver em desenvolvimento e atualizar seu código add_role, primeiro remova_role () 2) depois de acertar, nunca precisará executar esse código novamente.
Então, normalmente, coloco meu add_role () dentro de um gancho de ação wp_loaded. E como estou em desenvolvimento, também adicionei um remove_role () antes do meu add_role, para ter certeza de que, se eu modificar minha lista de limites, ele entrará em vigor.
Mas claramente isso agora está sendo executado toda vez que uma página do blog está sendo acessada. Ok, eu poderia colocá-lo em uma ação somente para administrador ou criar uma página de plug-in, talvez em Usuários ou Ferramentas, onde essa função pode ser criada uma vez. Acho que espero que exista uma solução mais simples e elegante por aí.
Eu não imagino que exista um tipo de ação run_once, existe?
Ou a melhor prática é apenas adicionar a função e usar add_cap () várias vezes? E mesmo assim, imagino que add_cap está acessando o banco de dados.
Apenas pensando em termos da melhor maneira de reduzir o acesso desnecessário ao banco de dados. Quais são as suas melhores práticas?
fonte
remove_role()
função antesadd_role()
me ajudou.Respostas:
As funções e os recursos do usuário são salvos no banco de dados; assim que você os tiver
add_role()
salvo e depois carregar, o WordPress conhecerá esse papel, assim como os papéis internos.Agora, se você observar a função
add_role()
mais especificamente na linha 141 , verá que ela só salva a função e os recursos no banco de dados se o var$use_db
estiver definido como true (que ele é por padrão), para que você possa simplesmente alterá-lo antes de ligar para o seuadd_role()
função e a função não será salva.experimentar:
Atualizar:
Se estiver em um ambiente de teste / desenvolvimento, não vejo desvantagem, mas se você estiver em um ambiente ativo, economize o tempo necessário para criar essa função em cada carga.
Quanto às melhores práticas, execute uma vez, se em um plug-in você deve usar
register_activation_hook
e para qualquer outra coisa eu uso uma função condicional simples feita sob medida:fonte