web-dev-qa-db-fra.com

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

J'ai créé le plugin de mes propres. Tout semble aller pour le mieux, mais une chose que je veux faire dans ce plug-in est la redirection vers la page des paramètres du plug-in correspondante lorsque le plug-in 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?

15
Vignesh Pichamani

Peut-être en utilisant la fonction wp_redirect() dans le hook d’activation. Dans l'exemple suivant, myplugin_settings est un espace réservé. Normalement, il s’agit simplement du $hook_suffix que vous obtenez de $hook_suffix = add_menu_page( /* etc. */ ); et de fonctions similaires.

CE CODE NE FONCTIONNE PAS, LISEZ PLUS BAS

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

Références:

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

EDIT

La redirection à l'intérieur du hook d'activation semble être effectuée avant l'activation effective du plug-in, peut-être à cause de l'appel de exit () avant l'exécution de l'activation. Ce code semble bien fonctionner avec activé_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' );

Si vous utilisez ce code en dehors du fichier de plugin principal, vous devrez repaler __FILE__ avec le chemin du fichier de plugin principal.

PENSAIT

Redirection de 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 allez interrompre l'activation de certains plugins, peut-être pas si votre plugin est le dernier à être activé, mais définitivement, vous cassez l'expérience utilisateur.

16
cybmeta

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

UPDATE

Même si c'est un commentaire en ligne, rappelez-vous:

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

Exemple spécifique

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

UPDATE 10/29/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 non de faire une redirection vers la page des paramètres du plug-in. Vérifiez my_plugin_activate et la condition if dans my_plugin_redirect.

J'espère que ça aide!

7
iEmanuele

Bonjour, j'ai utilisé la redirection de code à 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");
    }
 }
}
3
csehasib