Como redirecionar para a página de configurações depois que o plug-in é ativado?

16

Criei o meu próprio plugin. Tudo parece bom, mas uma coisa que quero fazer nesse plug-in é redirecionar para a página de configurações do plug-in correspondente quando o plug-in é ativado.

Por exemplo:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

Existe uma maneira de redirecionar para a página correspondente na ativação, por exemplo com register_activation_hook?

Vignesh Pichamani
fonte

Respostas:

17

Talvez usando a wp_redirect()função no gancho de ativação. No exemplo a seguir myplugin_settingsé um espaço reservado. Normalmente, isso é simplesmente o $hook_suffixmotivo de você voltar$hook_suffix = add_menu_page( /* etc. */ ); e funções similares.

ESTE CÓDIGO NÃO FUNCIONA, LEIA ABAIXO

register_activation_hook(__FILE__, 'cyb_activation');
function cyb_activation()
{
    // Don't forget to exit() because wp_redirect doesn't exit automatically
    exit( wp_redirect( admin_url( 'options-general.php?page=myplugin_settings' ) ) );
}

Referências:

  1. Registrar gancho de ativação
  2. admin_url ()

EDITAR

O redirecionamento dentro do gancho de ativação parece ser executado antes que o plug-in seja efetivamente ativado, talvez por causa da chamada de exit () antes da execução da ativação. Esse código parece funcionar bem usando o hoook de ação enabled_plugin:

function cyb_activation_redirect( $plugin ) {
    if( $plugin == plugin_basename( __FILE__ ) ) {
        exit( wp_redirect( admin_url( 'options-general.php' ) ) );
    }
}
add_action( 'activated_plugin', 'cyb_activation_redirect' );

Se você usar esse código fora do arquivo principal do plug-in, precisará repetir o __FILE__caminho do arquivo principal do plug-in.

PENSAMENTO

Redirecionar o usuário depois que seu plug-in foi ativado não é uma abordagem muito boa. No Wordpress, você pode ativar plugins em massa. O que acontecerá se você executar um redirecionamento nessa situação? Você interromperá a ativação de alguns plug-ins, talvez não se o seu último plugin for ativado, mas definitivamente você está quebrando a experiência do usuário.

cybmeta
fonte
11
Abordagem muito mais saudável. +1
kaiser
Alguém mais está obtendo um problema usando isso quando o plug-in não é ativado e você recebe o erro "Você não tem permissão para visualizar esta página"? Estou conectando minha página de menu incorretamente? Parece que a exit;chamada está cortando a ativação.
Andy Adams
O erro de permissão é porque você não alterou o URL de redirecionamento de 'options-general.php?page=myplugin_settings'para algo diferente e válido. De qualquer forma, o exitgancho de ativação é executado antes que o plug-in seja efetivamente ativado, portanto não funciona. Editei a resposta com um novo código de trabalho.
cybmeta
o código está resultando no cabeçalho já enviado .. alguma maneira de corrigi-lo?
Latheesh VM Villa
7

Você deve conseguir fazer o seguinte:

register_activation_hook(__FILE__, 'my_plugin_activate');
add_action('admin_init', 'my_plugin_redirect');

function my_plugin_activate() {
    add_option('my_plugin_do_activation_redirect', true);
}
// Solution 1
function my_plugin_redirect() {
    if (get_option('my_plugin_do_activation_redirect', false)) {
        delete_option('my_plugin_do_activation_redirect');
         wp_redirect("options-general.php?page=rotator");
         //wp_redirect() does not exit automatically and should almost always be followed by exit.
         exit;
    }
}

// OR

//Solution 2 (@kaiser suggestion)
function my_plugin_redirect() {
    if (get_option('my_plugin_do_activation_redirect', false)) {
        delete_option('my_plugin_do_activation_redirect');
         exit( wp_redirect("options-general.php?page=rotator") );
    }
}

ATUALIZAR

Mesmo se for um comentário embutido, lembre-se:

wp_redirect () não sai automaticamente e quase sempre deve ser seguido por exit.

Exemplo específico

<?php
    wp_redirect( $location, $status );
    exit;
?>

ATUALIZAÇÃO 29/10/2013

Não foi mencionado, mas observe que minha solução oferece a capacidade de verificar se é o caso ou não de redirecionar para a página de configurações do plug-in. Verifique my_plugin_activatee se a condição estiver my_plugin_redirect.

Espero que ajude!

iEmanuele
fonte
Não deveria haver um em exit()torno do wp_redirect()?
kaiser
2
@ kaiser, resposta atualizada.
IEmanuele 17/09/2013
3

Olá, usei o seguinte redirecionamento de código após a ativação do plugin. Você pode usar esse código. Está funcionando bem.

register_activation_hook(__FILE__, 'nht_plugin_activate');
add_action('admin_init', 'nht_plugin_redirect');

function nht_plugin_activate() {
add_option('nht_plugin_do_activation_redirect', true);
}

function nht_plugin_redirect() {
if (get_option('nht_plugin_do_activation_redirect', false)) {
    delete_option('nht_plugin_do_activation_redirect');
    if(!isset($_GET['activate-multi']))
    {
        wp_redirect("edit.php?post_type=headline&page=news-headline");
    }
 }
}
csehasib
fonte
nht_ é o prefixo do meu plug-in & "edit.php? post_type = headline & page = news-headline" é a página de redirecionamento. por favor substitua esses. Você pode ver mais tutoriais em e2soft.com
csehasib