Comment rediriger vers la page des paramètres une fois le plugin activé?

16

J'ai créé mon propre plugin. Tout semble OK mais une chose que je veux faire dans ce plugin est de rediriger vers la page des paramètres de plugin correspondante lorsque le plugin est activé.

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

Existe-t-il un moyen de rediriger vers la page correspondante lors de l'activation, par exemple avec register_activation_hook?

Vignesh Pichamani
la source

Réponses:

17

Peut-être en utilisant la wp_redirect()fonction dans le crochet d'activation. Dans l'exemple suivant myplugin_settingsest un espace réservé. Normalement, il s'agit simplement des fonctions $hook_suffixde retour $hook_suffix = add_menu_page( /* etc. */ );et des fonctions similaires.

CE CODE NE FONCTIONNE PAS, LIRE CI-DESSOUS

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

Les références:

  1. Enregistrer le crochet d'activation
  2. admin_url ()

ÉDITER

La redirection à l'intérieur du crochet d'activation semble être effectuée avant que le plugin ne soit effectivement activé, peut-être à cause de l'appel de exit () avant que l'activation ne soit exécutée. Ce code semble bien fonctionner à l' aide activated_plugin actions 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' );

Si vous utilisez ce code en dehors du fichier du plugin principal, vous devrez le remplacer __FILE__par le chemin du fichier du plugin principal.

PENSÉE

Rediriger l'utilisateur après l'activation de votre plugin n'est pas une très bonne approche. Dans Wordpress, vous pouvez activer les plugins en bloc. Que se passe-t-il alors si vous effectuez une redirection dans cette situation? Vous interromprez l'activation de certains plugins, peut-être pas si votre plugin est le dernier activé, mais vous rompez définitivement l'expérience utilisateur.

cybmeta
la source
1
Approche beaucoup plus saine. +1
kaiser
Quelqu'un d'autre obtient un problème en utilisant ceci lorsque le plugin ne parvient pas à s'activer et vous obtenez à la place une erreur "Vous n'avez pas la permission de voir cette page"? Suis-je accroché ma page de menu? Il semble que l' exit;appel coupe court l'activation.
Andy Adams
L'erreur d'autorisation est due au fait que vous n'avez pas modifié l'URL de redirection de 'options-general.php?page=myplugin_settings'quelque chose de différent et valide. Quoi qu'il en soit, le exithook d'activation est exécuté avant que le plugin ne soit effectivement activé, donc cela ne fonctionne pas. J'ai édité la réponse avec un nouveau code de travail.
cybmeta
le code se traduit par un en-tête déjà envoyé..un moyen de le corriger?
Latheesh VM Villa
7

Vous devriez pouvoir le faire comme ceci:

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

MISE À JOUR

Même s'il s'agit d'un commentaire en ligne, n'oubliez pas:

wp_redirect () ne se ferme pas automatiquement et devrait presque toujours être suivi de exit.

Exemple spécifique

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

MISE À JOUR 29/10/2013

Cela n'a pas été mentionné, mais veuillez noter que ma solution offre la possibilité de vérifier si c'est le cas ou de ne pas faire de redirection vers la page des paramètres du plugin. Vérifiez my_plugin_activateet l'état si my_plugin_redirect.

J'espère que cela aide!

iEmanuele
la source
Ne devrait-il pas y en avoir exit()autour wp_redirect()?
kaiser du
2
@kaiser, réponse mise à jour.
iEmanuele
3

Bonjour, j'ai utilisé la redirection du code du soufflet après l'activation du plugin. Vous pouvez utiliser ce code. Ça marche 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
la source
nht_ est mon préfixe de plugin & "edit.php? post_type = headline & page = news-headline" est une page de redirection. veuillez les remplacer. Vous pouvez voir plus de tutoriel sur e2soft.com
csehasib