Come reindirizzare alla pagina delle impostazioni una volta attivato il plugin?


16

Ho creato il mio plugin. Tutto sembra OK, ma una cosa che voglio fare in quel plugin è il reindirizzamento alla pagina delle impostazioni del plugin corrispondente quando il plugin è attivato.

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

C'è un modo per reindirizzare alla pagina corrispondente all'attivazione, ad esempio con register_activation_hook?

Risposte:


17

Forse usando la wp_redirect()funzione nel gancio di attivazione. Nel seguente esempio myplugin_settingsè un segnaposto. Normalmente questo è semplicemente il $hook_suffixritorno da $hook_suffix = add_menu_page( /* etc. */ ); e funzioni simili.

QUESTO CODICE NON FUNZIONA, LEGGI QUI SOTTO

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

Riferimenti:

  1. Registrare il gancio di attivazione
  2. ADMIN_URL ()

MODIFICARE

Il reindirizzamento all'interno dell'hook di attivazione sembra essere eseguito prima che il plugin sia effettivamente attivato, forse a causa della chiamata di exit () prima che venga eseguita l'attivazione. Questo codice sembra funzionare bene con activated_plugin azione 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 si utilizza questo codice al di fuori del file del plug-in principale, sarà necessario ripetere la valutazione __FILE__con il percorso del file del plug-in principale.

PENSATO

Reindirizzare l'utente dopo l'attivazione del plug-in non è un approccio molto valido. In Wordpress puoi attivare plugin in blocco. Cosa succede se esegui un reindirizzamento in questa situazione? Interromperai l'attivazione di alcuni plugin, forse non se il tuo plugin è l'ultimo ad essere attivato, ma sicuramente stai interrompendo l'esperienza utente.


1
Approccio molto più sano. +1
kaiser,

Qualcun altro sta riscontrando un problema usando questo in cui il plugin non si attiva e si ottiene invece un errore "Non si dispone dell'autorizzazione per visualizzare questa pagina"? Ho sbagliato la pagina del mio menu? Sembra che la exit;chiamata stia interrompendo l'attivazione.
Andy Adams,

L'errore di autorizzazione è perché non hai modificato l'URL di reindirizzamento da 'options-general.php?page=myplugin_settings'qualcosa di diverso e valido. Ad ogni modo, il exitgancio di attivazione viene eseguito prima che il plugin sia effettivamente attivato, quindi non funziona. Ho modificato la risposta con un nuovo codice funzionante.
cybmeta,

il codice sta generando un'intestazione già inviata ... in che modo risolverlo?
Latheesh VM Villa,

7

Dovresti essere in grado di farlo in questo modo:

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

AGGIORNARE

Anche se è un commento in linea, ricorda:

wp_redirect () non esce automaticamente e dovrebbe quasi sempre essere seguito da exit.

Esempio specifico

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

AGGIORNAMENTO 29/10/2013

Non è stato menzionato, ma tieni presente che la mia soluzione offre la possibilità di verificare se è il caso o di non effettuare un reindirizzamento alla pagina delle impostazioni del plug-in. Controllare my_plugin_activatee la condizione if in my_plugin_redirect.

Spero che sia d'aiuto!


Non dovrebbe esserci un exit()giro intorno al wp_redirect()?
Kaiser,

2
@kaiser, risposta aggiornata.
iEmanuele

3

Ciao ho usato il reindirizzamento del codice a soffietto dopo l'attivazione del plugin. Puoi usare questo codice. Funziona bene.

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

nht_ è il prefisso del mio plug-in e "edit.php? post_type = titolo e pagina = titolo-notizia" è la pagina di reindirizzamento. si prega di sostituire questo quelli. Puoi vedere altri tutorial su e2soft.com
csehasib,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.