¿Cómo redireccionar a la página de configuración una vez que se activa el complemento?

15

He creado el complemento por mi cuenta. Todo parece estar bien, pero una cosa que quiero hacer en ese complemento es redirigir a la página de configuración del complemento correspondiente cuando el complemento está activado.

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

¿Hay alguna forma de redireccionar a la página correspondiente en la activación, por ejemplo con register_activation_hook ?

    
pregunta Vignesh Pichamani 17.09.2013 - 15:02

3 respuestas

16

Tal vez esté utilizando la función wp_redirect() en el enlace de activación. En el siguiente ejemplo, myplugin_settings es un marcador de posición. Normalmente, esto simplemente es el $hook_suffix que recibe de $hook_suffix = add_menu_page( /* etc. */ ); y funciones similares.

ESTE CÓDIGO NO FUNCIONA, LEÍDO A CONTINUACIÓN

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

Referencias:

  1. Registrar gancho de activación
  2. admin_url ()

EDIT

El redireccionamiento dentro del enlace de activación parece realizarse antes de que el complemento se active efectivamente, tal vez debido a la llamada de exit () antes de que se ejecute la activación. Este código parece funcionar bien con enabled_plugin hoook de acción:

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' );

Si utiliza este código fuera del archivo del complemento principal, deberá volver a compilar __FILE__ con la ruta del archivo del complemento principal.

THOUGHT

Redirigir al usuario después de que se haya activado su complemento no es un buen enfoque. En Wordpress puedes activar complementos a granel. ¿Qué sucede entonces si realiza una redirección en esta situación? Interrumpirá la activación de algunos complementos, tal vez no si su complemento es el último que se está activando, pero definitivamente está rompiendo la experiencia del usuario.

    
respondido por el cybmeta 17.09.2013 - 15:26
7

Deberías poder hacerlo así:

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

ACTUALIZAR

Aunque sea un comentario en línea, recuerda:

  

wp_redirect () no se cierra automáticamente y casi siempre debería estar   seguido de salir.

Ejemplo específico

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

ACTUALIZACIÓN 10/29/2013

No se mencionó, pero tenga en cuenta que mi solución ofrece la posibilidad de verificar si es así o no hacer una redirección a la página de configuración del complemento. Verifique my_plugin_activate y la condición if en my_plugin_redirect .

Espero que ayude!

    
respondido por el iEmanuele 17.09.2013 - 15:24
3

Hola, he utilizado la redirección de código de fuelle después de la activación del complemento. Puede utilizar este código. Está funcionando muy bien.

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");
    }
 }
}
    
respondido por el csehasib 15.02.2015 - 06:22

Lea otras preguntas en las etiquetas