Em que ação devo me envolver ao adicionar funções e recursos?


10

Vou usar add_role () e $ role-> add_cap () para configurar uma nova função personalizada e anexar um novo recurso às funções existentes.

Gostaria de saber onde é o melhor lugar para fazer isso? Obviamente eu posso fazê-lo diretamente dentro de functions.php e pronto. Mas essa é a melhor prática? Só preciso fazer isso em admin_init? ou devo fazê-lo no init?

Não sei ao certo quais são as práticas recomendadas usando ganchos de ação init, em vez de simplesmente soltar uma chamada de função direta dentro de functions.php.

Obrigado pela sua contribuição!

Respostas:


10

Ao adicionar uma função e recursos, você só precisa executar o código uma vez, pois as funções e os recursos são salvos no banco de dados ao usar add_roleou ->add_capfuncionam, assim como Andy disse que você pode usar after_setup_themepara esse tipo de ação, mas adicione algum tipo de verificação para que apenas é executado uma vez, como register_activation_hook ou usando as opções:

add_action('after_setup_theme','my_add_role_function');

function my_add_role_function(){
    $roles_set = get_option('my_roles_are_set');
    if(!$roles_set){
        add_role('my_role', 'my_roleUser', array(
            'read' => true, // True allows that capability, False specifically removes it.
            'edit_posts' => true,
            'delete_posts' => true,
            'upload_files' => true 
        ));
        update_option('my_roles_are_set',true);
    }
}

Obrigado por isso. É verdade que add_role ou add_cap SEMPRE aproveita o banco de dados? Quando eu procurei no código fonte, parecia que esse nem sempre era o caso - ou seja: na maioria dos métodos de WP_Roles, há uma verificação de if ($ this-> use_db), o que me faz pensar que existe a possibilidade de que os papéis nem sempre pode ser armazenado no banco de dados.
Tom Auger

Além disso, em vez de definir um sinalizador usando opções, o que não me parece particularmente escalável, não há uma maneira de simplesmente perguntar se a função foi criada? Na falta disso, que mal faria para redefinir a função se ela já estiver lá? Você receberia uma função duplicada ou apenas ignoraria? Olhando novamente para o resources.php, vejo isso em add_role: if (isset ($ this-> functions [$ role])) return; o que parece indicar que ele não duplicará a função, para não causar danos.
Tom Auger

Não sei o que você quer dizer, mas o padrão está $use_db = true;na classe WP_Roles. e quanto à definição de um sinalizador usando as opções, é um exemplo, você pode usar, register_activation_hookmas a idéia é que seu código seja executado apenas uma vez e assim você economiza o tempo de execução.
Bainternet 7/04

Eu nunca vi isso, mas me parece que pode fazer sentido colocar alterações de função em um plug-in e aproveitar os ganchos de ativação / desativação para acionar as alterações apenas uma vez. Alguém já seguiu esse caminho?
mrwweb

@mrwweb que deve funcionar muito bem, bem
Bainternet

7

Para plugins, tive sucesso usando plugins_loadedisso. Para temas, eu usaria after_setup_theme.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.