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.