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

16

Creé 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 manera de redirigir a la página correspondiente en la activación, por ejemplo con register_activation_hook?

Vignesh Pichamani
fuente

Respuestas:

17

Tal vez usando la wp_redirect()función en el gancho de activación. En el siguiente ejemplo myplugin_settingses un marcador de posición. Normalmente esto es simplemente el $hook_suffixregreso de $hook_suffix = add_menu_page( /* etc. */ ); y funciones similares.

ESTE CÓDIGO NO FUNCIONA, LEA 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 ()

EDITAR

La redirección dentro del enlace de activación parece realizarse antes de que el complemento se active efectivamente, tal vez debido a la llamada de salida () antes de que se ejecute la activación. Este código parece funcionar bien usando activated_plugin hoook 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 usa este código fuera del archivo del complemento principal, deberá volver a empalmar __FILE__con la ruta del archivo del complemento principal.

PENSAMIENTO

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

cybmeta
fuente
1
Enfoque mucho más sano. +1
kaiser
¿Alguien más tiene un problema al usar esto cuando el complemento no se activa y en su lugar aparece el error "No tiene permiso para ver esta página"? ¿Estoy enganchando mal mi página de menú? Parece que la exit;llamada está acortando la activación.
Andy Adams
El error de permiso se debe a que no ha cambiado la URL de redireccionamiento de 'options-general.php?page=myplugin_settings'algo diferente y válido. De todos modos, el exitenganche de activación se ejecuta antes de que el complemento se active efectivamente, por lo que no funciona. He editado la respuesta con un nuevo código de trabajo.
cybmeta
el código está dando como resultado un encabezado ya enviado ... ¿alguna forma de arreglarlo?
Latheesh VM Villa
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

Incluso si es un comentario en línea, recuerde:

wp_redirect () no sale automáticamente y casi siempre debería ir seguido de exit.

Ejemplo especifico

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

ACTUALIZACIÓN 29/10/2013

No se mencionó, pero tenga en cuenta que mi solución ofrece la posibilidad de verificar si es el caso o no hacer una redirección a la página de configuración del complemento. Compruebe my_plugin_activatey la condición si enmy_plugin_redirect .

¡Espero eso ayude!

iEmanuele
fuente
¿No debería haber una exit()alrededor del wp_redirect()?
kaiser
2
@kaiser, respuesta actualizada.
iEmanuele
3

Hola, he utilizado el redireccionamiento del código de fuelle después de la activación del complemento. Puedes usar este código. Funciona 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");
    }
 }
}
csehasib
fuente
nht_ es mi prefijo de complemento y "edit.php? post_type = headline & page = news-headline" es la página de redireccionamiento. por favor reemplace esto esos. Puede ver más tutoriales en e2soft.com
csehasib