Eu tenho um plugin que não quero ser ativado se ele não atender a um determinado número de versão do WP e mostrar uma mensagem de erro no gancho de ação admin_notices. Tanto quanto eu pesquisei, o código abaixo é o melhor que posso alcançar esse objetivo:
$wp_version = get_bloginfo('version');
if ( $wp_version < 4.5 ) {
add_action( 'admin_init', 'deactivate_plugin_now' );
add_action( 'admin_notices', 'errormsg' ) );
}
public function deactivate_plugin_now() {
if ( is_plugin_active('myplugin/myplugin.php') ) {
deactivate_plugins('myplugin/myplugin.php');
}
}
public function errormsg () {
$class = 'notice notice-error';
$message = __( 'Error you did not meet the WP minimum version', 'text-domain' );
printf( '<div class="%1$s"><p>%2$s</p></div>', $class, $message );
}
Mas acho que ainda estou fazendo errado, porque estou recebendo a mensagem ativada pelo plug-in ao mesmo tempo com o aviso de erro que designei.
Qual seria o gancho / filtro de ação adequado para interromper corretamente o processo de ativação do plug-in, para que eu receba apenas a mensagem de erro?
plugins
plugin-development
Carl Alberto
fonte
fonte
Respostas:
Talvez eu esteja atrasado para essa parte, mas para interromper a ativação do plug-in e fazer com que o WordPress mostre uma mensagem de erro para onde os avisos do administrador vão, basta enviar uma mensagem de erro e finalizar a execução. Isso tem a vantagem adicional de jogar bem com o wp-cli :
Exemplo:
fonte
Essencialmente, você não pode fazer do jeito que quiser. Todos os formulários do wordpress são redirecionados após a conclusão do processo e não geram saída por si mesmos e, portanto, a mensagem de erro é gerada em uma solicitação de página diferente. Se o seu plug-in não estiver ativo nesse momento, nenhuma mensagem será exibida. Outra complicação é que os plugins podem ser ativados pelo Ajax.
Uma maneira feia, mas funcional, é falhar na ativação gerando um erro php, ou o IIRC faz com que qualquer saída funcione; portanto, você pode simplesmente exibir algo como "incompatibilidade de versão" no gancho de ativação do plug-in, que será exibido na caixa de saída de erro que está sendo exibido quando a ativação falha.
Algo para se pensar: as pessoas podem incluir seus arquivos de plug-in ou ativá-lo de alguma forma, contornando a interface do usuário ou usando o wp-cli. dependendo dos motivos pelos quais você deseja falhar na ativação, apenas ter a mensagem de erro pode ser melhor do que tentar falhar na ativação
fonte
Como você atualizou o título, preciso fornecer a outra resposta, a anterior não a ignore, porque é ainda mais simples que esta.
Observe que quando você tenta ativar o plug-in, você interage com o arquivo plugins.php. Lá você tem uma grande opção de ações que você pode executar.
E caso você tenha o erro definido
$_GET['error']
no momento, você tem apenas as mensagens de erro predefinidas - você não pode criar sua própria mensagem personalizada. Foi por isso que propus a solução para você.Pode-se propor as mensagens personalizadas como avisos do administrador para o núcleo do WordPress, caso os plug-ins não atendam a alguns requisitos.
fonte
admin_notices
não será acionada.Que tal esse código para suprimir hello.php (Hello Dolly) se WP <8.5:
Eu acho que isso é bom porque não força você a criar avisos de administração. Você simplesmente receberá o feedback sobre o motivo do aborto na instalação do plugin.
Eu adicionei este código para o HelloDolly, mas você precisará ajustar.
fonte