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

15

Eu criei o Plugin sozinho. Tudo parece OK, mas uma coisa que eu quero fazer nesse plugin é redirecionar para a página de configurações do plugin correspondente quando o plugin é 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 ?

    
por Vignesh Pichamani 17.09.2013 / 15:02

3 respostas

16

Talvez seja possível usar a função wp_redirect() no gancho de ativação. No exemplo a seguir, myplugin_settings é um marcador de posição. Normalmente, isso é simplesmente o $hook_suffix que você recebe de $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. Registre o gancho de ativação
  2. admin_url ()

EDITAR

O redirecionamento dentro do gancho de ativação parece ser executado antes que o plugin seja efetivamente ativado, talvez por causa da chamada de exit () antes que a ativação seja executada. Este código parece funcionar bem com o activated_plugin action hoook:

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 de plug-in principal, será necessário repalciar __FILE__ com o caminho do arquivo de plug-in principal.

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 acontece se você fizer um redirecionamento nessa situação? Você vai quebrar a ativação de alguns plugins, talvez não se o seu plugin for o último a ser ativado, mas definitivamente você está quebrando a experiência do usuário.

    
por cybmeta 17.09.2013 / 15:26
7

Você deve ser capaz de fazer assim:

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") );
    }
}

UPDATE

Mesmo que seja um comentário in-line, lembre-se:

  

wp_redirect () não sai automaticamente e deve ser quase sempre   seguido pela saída.

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 redirecionar para a página de configurações do plug-in. Verifique my_plugin_activate e a condição if em my_plugin_redirect .

Espero que ajude!

    
por iEmanuele 17.09.2013 / 15:24
3

Olá, usei redirecionamento de código de foles após a ativação do plug-in. Você pode usar este 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");
    }
 }
}
    
por csehasib 15.02.2015 / 06:22