Remover configurações se o tema for excluído?

4

É possível executar uma ação apenas se o tema for excluído (não desativado) do diretório do tema?

Por exemplo, desejo remover as configurações de tema do banco de dados depois que o tema for removido. Então, quero executar isso quando o tema for excluído:

delete_option( 'mysettings' );
    
por jay 26.11.2013 / 08:53

5 respostas

2

Como as outras respostas parecem implicar, não há uma maneira integrada de fazer isso. Não existe uma API de desinstalação de temas semelhante a que para plugins . Na verdade, existe um bilhete antigo para que esse recurso seja adicionado ao núcleo do WordPress, para que os temas possam ser desinstalados. O consenso de os principais desenvolvedores parece que este não é um recurso que os temas precisam ter. Não tenho certeza de qual é a razão para isso. Talvez você possa ajudar a explicar-lhes os benefícios disso.

    
por J.D. 28.01.2014 / 21:41
0

O único gancho de ação / filtro que encontrei nesta parte do código está em

do_action( 'delete_site_transient_' . $transient, $transient );

É chamado dentro de delete_site_transient('update_themes'); , que é chamado em function delete_theme($stylesheet, $redirect = '') depois que o tema é excluído com sucesso.

Então, faço isso adicionando minha ação a delete_site_transient_update_themes . Nesta ação, você pode verificar algumas condições (nome do tema) e, em seguida, excluir algumas opções.

É claro que esse código é chamado quando o tema está inativo e depois que seu diretório é excluído do servidor. Então você não pode adicionar esta ação dentro desse tema (seria legal) e você tem que colocá-lo em algum plugin. (Não estou convencido de que instalar um plug-in adicional apenas para garantir que as opções de tema sejam excluídas depois que o tema for excluído é uma ótima ideia).

    
por Krzysiek Dróżdż 26.11.2013 / 22:18
0

Não tenho certeza se entendi a pergunta, então vou reformulá-la primeiro, mas se o fizer, resolvi o problema.

Entendendo a pergunta como:

Se o tema for desativado, as opções do site serão preservadas, portanto, se forem ativadas novamente, não precisarão ser inseridas novamente, mas, quando excluídas, elas serão completamente removidas.

Esta não é uma resposta completa porque fala para o plug-in desativar versus desinstalar hooks em vez de theme, mas supondo que o tema tenha algo semelhante, o que fiz foi:

  1. Ao desativar, pressionei as configurações da opção em uma pequena tabela de backup.
  2. Ao ativar, verifique se a tabela de backup existe e, em caso afirmativo, restaure as configurações de opção do backup e elimine a tabela (ou apenas verifique a linha e exclua a linha). Certifique-se de nomear a tabela de forma que ela esteja claramente vinculada ao tema, como as notas acima no woocommerce. E sempre exclua as configurações depois que elas forem usadas, para garantir que as configurações mais recentes estejam disponíveis.
  3. Ao excluir, se comporte normalmente (o que elimina as configurações da opção permanentemente).

Desta forma, o usuário não precisa refazer as configurações da opção se tiver que desativar a verificação de conflitos de plug-ins e de temas (como recentemente tive a ver com o tema Woo).

    
por Margaret Fisk 02.12.2013 / 07:48
0

depende totalmente do autor do tema, acho que ... alguns fazem melhor coleta de lixo do que outros. Acabei de terminar completamente a minha tabela wp_options tentando localizar uma causa ... e, ao fazê-lo, encontrei uma TONELADA de opções de temas para os temas há muito tempo desde que foram apagados e saíram do servidor. Felizmente, aqueles com mais opções que eu queria livrar e limpar a minha mesa, o autor colocou um bom prefixo em todos os arquivos 'dele' para que eles pudessem ser facilmente identificados. Entre na sua mesa e veja se este é um caso para você. Se for, então você pode escrever uma consulta apropriada.

Além disso, transientes e site_transients devem ser removidos após um certo tempo ... isso nem sempre é o caso. Eu apaguei páginas e páginas daqueles manualmente também.

Não sei se isso responde à pergunta. Parece que você quer gerar uma função php ... Eu faria uma consulta mySql e faria assim. (com backups db primeiro, claro!)

    
por Oxnard Developer 18.12.2013 / 05:25
0

É muito complexo saber qual opção foi gerada pelas configurações do seu tema.

Mas se você seguir convenção de nomes, por exemplo, Woocommerce (Todas as opções criadas pelo Woocomerce têm um nome como woocommerce_* e woocommerce como o nome do diretório do plug-in). Facilita a pesquisa e a exclusão de opções de temas.

Então, para as opções de tema, você pode procurar por isso:

Se o tema atual é chamado Deepfocus, o nome da opção deve ser como deepfocus _ *

Se o tema atual for Twenty Twelve, o nome da opção deve ser como vinte e doze _ *

Nota : Eu criei um plugin simples ( WP-Delete-Theme-Option ) que segue essas convenções para excluir temas específicos opção.

  

O plug-in gera o nome da opção a partir do nome do diretório do tema.

    
por Ravinder Kumar 26.11.2013 / 14:09