Wie kann ich zur Einstellungsseite umleiten, sobald das Plugin aktiviert ist?

16

Ich habe mein eigenes Plugin erstellt. Alles scheint in Ordnung zu sein, aber eine Sache, die ich in diesem Plugin tun möchte, ist, auf die entsprechende Plugin-Einstellungsseite umzuleiten, wenn das Plugin aktiviert ist.

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

Gibt es eine Möglichkeit, bei der Aktivierung auf die entsprechende Seite umzuleiten, zum Beispiel mit register_activation_hook?

Vignesh Pichamani
quelle

Antworten:

17

Verwenden Sie möglicherweise die wp_redirect()Funktion im Aktivierungshaken. Im folgenden Beispiel myplugin_settingsist ein Platzhalter. Normalerweise ist dies einfach das $hook_suffix, von dem Sie zurückkehren $hook_suffix = add_menu_page( /* etc. */ ); und ähnliche Funktionen.

DIESER CODE FUNKTIONIERT NICHT, LESEN SIE UNTEN

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

Verweise:

  1. Aktivierungshaken registrieren
  2. admin_url ()

BEARBEITEN

Die Umleitung innerhalb des Aktivierungs-Hooks scheint ausgeführt zu werden, bevor das Plugin effektiv aktiviert wird, möglicherweise aufgrund des Aufrufs von exit (), bevor die Aktivierung ausgeführt wird. Dieser Code scheint gut zu funktionieren, wenn activated_plugin action hoook verwendet wird:

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

Wenn Sie diesen Code außerhalb der Haupt-Plugin-Datei verwenden, müssen Sie den __FILE__Pfad der Haupt-Plugin-Datei neu eingeben .

HABE GEDACHT

Das Umleiten des Benutzers nach der Aktivierung Ihres Plugins ist kein guter Ansatz. In Wordpress können Sie Plugins in loser Schüttung aktivieren. Was passiert dann, wenn Sie in dieser Situation eine Umleitung durchführen? Sie werden die Aktivierung einiger Plugins unterbrechen, möglicherweise nicht, wenn Ihr Plugin das letzte ist, das aktiviert wird, aber definitiv brechen Sie die Benutzererfahrung.

Cybmeta
quelle
1
Viel vernünftigerer Ansatz. +1
Kaiser
Jemand anderes, der ein Problem damit hat, bei dem das Plugin nicht aktiviert werden kann und stattdessen die Fehlermeldung "Sie haben keine Berechtigung, diese Seite anzuzeigen" angezeigt wird? Hänge ich meine Menüseite falsch ein? Es scheint, als würde der exit;Anruf die Aktivierung abbrechen.
Andy Adams
Der Berechtigungsfehler besteht darin, dass Sie die Umleitungs-URL nicht 'options-general.php?page=myplugin_settings'in eine andere und gültige URL geändert haben . Wie auch immer, der exitin der Aktivierung befindliche Haken wird ausgeführt, bevor das Plugin effektiv aktiviert wird, so dass es nicht funktioniert. Ich habe die Antwort mit einem neuen Arbeitscode bearbeitet.
Cybmeta
Der Code hat zur Folge, dass der Header bereits gesendet wurde.
Latheesh VM Villa
7

Du solltest es so machen können:

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

AKTUALISIEREN

Auch wenn es sich um einen Inline-Kommentar handelt, bedenken Sie Folgendes:

wp_redirect () wird nicht automatisch beendet und sollte fast immer von exit gefolgt werden.

Spezifisches Beispiel

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

UPDATE 29.10.2013

Es wurde nicht erwähnt, aber bitte beachten Sie, dass meine Lösung die Möglichkeit bietet, zu überprüfen, ob dies der Fall ist, oder nicht, eine Weiterleitung zur Plugin-Einstellungsseite durchzuführen. Überprüfen Sie my_plugin_activateund die if Bedingung in my_plugin_redirect.

Ich hoffe es hilft!

Emmanuele
quelle
Sollte es nicht eine exit()um die geben wp_redirect()?
Kaiser
2
@ Kaiser, Antwort aktualisiert.
Emmanuele
3

Hallo, ich habe nach der Aktivierung des Plugins die Balg-Code-Umleitung verwendet. Sie können diesen Code verwenden. Es funktioniert gut.

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
quelle
nht_ ist mein Plugin-Präfix & "edit.php? post_type = headline & page = news-headline" ist die Weiterleitungsseite. Bitte ersetzen Sie diese. Sie können mehr Tutorial auf e2soft.com sehen
csehasib