Estou fazendo um plugin wordpress. Quais são as coisas típicas que devo incluir no recurso de desinstalação?
Por exemplo, devo excluir as tabelas que criei na função de instalação?
Eu limpo minhas entradas de opção?
Algo mais?
plugins
activation
uninstallation
deactivation
conservatório
fonte
fonte
Respostas:
Existem três ganchos diferentes . Eles são acionados nos seguintes casos:
Como acionar funções com segurança durante os cenários
A seguir, mostramos as maneiras corretas de conectar com segurança funções de retorno de chamada que são acionadas durante as ações mencionadas.
Como você pode usar esse código em um plug-in que usa
Mostrarei três plugins de demonstração diferentes que você pode inspecionar e, posteriormente, implementará o código em seus próprios plug-ins.
Nota importante antecipadamente!
Como esse tópico é extremamente difícil e muito detalhado e tem uma dúzia de casos extremos, essa resposta nunca será perfeita. Vou continuar aprimorando-o com o tempo, portanto, verifique regularmente.
(1) Ative / Desative / Desinstale plugins.
Os retornos de chamada de configuração do plug-in são acionados pelo núcleo e você não tem influência sobre como o núcleo faz isso. Há algumas coisas a serem lembradas:
echo/print
coisa (!) Durante retornos de chamada de instalação. Isso levará àheaders already sent
mensagem e o núcleo recomendará desativar e excluir seu plug-in ... não pergunte: eu sei ...exit()
declarações a todos os retornos de chamada diferentes para que você possa ter uma ideia do que realmente está acontecendo. Apenas descomente-os para ver as coisas funcionando.__FILE__ != WP_PLUGIN_INSTALL
e (se não: abortar!) Para ver se alguém realmente está desinstalando o plug-in. Eu recomendaria simplesmente acionaron_deactivation()
retornos de chamada durante o desenvolvimento, para que você economize o tempo necessário para recuperar tudo. Pelo menos é o que eu faço.defined( 'ABSPATH' ) OR exit;
wp_die()
tela solicitando permissões adequadas (e se você quiser tentar novamente ... sim, com certeza ), quando ocorrer um erro. Isso acontece quando o núcleo o redireciona, define a corrente$GLOBALS['wp_list_table']->current_action();
comoerror_scrape
e, em seguida, verifica o referenciadorcheck_admin_referer('plugin-activation-error_' . $plugin);
, onde$plugin
está$_REQUEST['plugin']
. Portanto, o redirecionamento acontece na metade do carregamento da página e você obtém essa barra de rolagem com fio e a tela de matriz visualiza a caixa de aviso / mensagem amarela do administrador. Se isso acontecer: mantenha a calma e procure o erro com algumaexit()
depuração passo a passo.(A) Plugin de funções simples
Lembre-se de que isso pode não funcionar se você ligar os retornos de chamada antes da definição da função.
(B) Uma arquitetura baseada em classe / OOP
Este é o exemplo mais comum nos plugins atuais.
(C) Uma arquitetura baseada em classe / OOP com um objeto de configuração externo
Este cenário pressupõe que você tem um arquivo plugin principal e um segundo arquivo chamado
setup.php
em um subdiretório do plugin chamadoinc
:~/wp-content/plugins/your_plugin/inc/setup.php
. Isso funcionará também quando a pasta do plug-in estiver fora da estrutura padrão da pasta WP, bem como quando o diretório de conteúdo for renomeado ou nos casos em que o arquivo de instalação tiver um nome diferente. Somente ainc
pasta precisa ter o mesmo nome e localização em relação ao diretório raiz dos plug-ins.Nota: Você pode simplesmente pegar as três
register_*_hook()*
funções e as classes e soltá-las no seu plugin.O principal arquivo de plug-in:
O arquivo de instalação:
(2) Atualizações de plug-in
Se você escrever um plug-in que tenha sua própria tabela ou opções de banco de dados, poderá haver cenários em que você precise alterar ou atualizar as coisas.
Infelizmente até agora não há possibilidade de executar algo na instalação do plugin / tema ou atualização / atualização. Felizmente, há uma solução alternativa: conecte uma função personalizada a uma opção personalizada (sim, é ruim - mas funciona).
Fonte
Esta função de atualização é um exemplo não muito agradável / bem escrito, mas como dito: é um exemplo e a técnica funciona bem. Melhorará isso com uma atualização posterior.
fonte
check_admin_referer()
. Eles não precisam ser higienizados porque o núcleo não faz isso sozinho e o compararia com$_REQUEST
valores não higienizados . Mas se eles começarem a chorar como menininhas por causa disso, usefilter_var()
ou useesc_attr()
.Para testar o sistema atual quanto às características necessárias, como a versão PHP ou extensões instaladas, você pode usar algo assim:
Teste com uma verificação do PHP 5.5:
fonte
register_activation_hook
aqui - por que não usá-lo? Também disparará antes ou depoisregister_activation_hook
eregister_activation_hook
disparará mesmo que o acima não passe?add_action( 'admin_notices', 't5_check_admin_notices', 0 );
para um gancho de ativação e o plug-in é ativado sem realizar as verificações. . .admin_notices
.