Jak przekierować na stronę ustawień po aktywacji wtyczki?

16

Stworzyłem własną wtyczkę. Wszystko wydaje się OK, ale jedną rzeczą, którą chcę zrobić w tej wtyczce, jest przekierowanie na odpowiednią stronę ustawień wtyczki, gdy wtyczka jest aktywowana.

Na przykład:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

Czy istnieje sposób przekierowania na odpowiednią stronę podczas aktywacji, na przykład za pomocą register_activation_hook?

Vignesh Pichamani
źródło

Odpowiedzi:

17

Może za pomocą wp_redirect()funkcji w haku aktywacyjnym. W poniższym przykładzie myplugin_settingsjest symbolem zastępczym. Zwykle jest to po prostu$hook_suffix powrót z $hook_suffix = add_menu_page( /* etc. */ ); podobnych funkcji.

TEN KOD NIE DZIAŁA, CZYTAJ PONIŻEJ

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

Bibliografia:

  1. Zarejestruj hak aktywacyjny
  2. admin_url ()

EDYTOWAĆ

Przekierowanie wewnątrz haka aktywacyjnego wydaje się być wykonane przed skuteczną aktywacją wtyczki, być może z powodu wywołania exit () przed wykonaniem aktywacji. Wygląda na to, że ten kod działa dobrze przy użyciu funkcji hoook z aktywowanej_pluginy :

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

Jeśli użyjesz tego kodu poza głównym plikiem wtyczki, będziesz musiał ponownie zainstalować __FILE__ ze ścieżką głównego pliku wtyczki.

MYŚL

Przekierowanie użytkownika po aktywacji wtyczki nie jest zbyt dobrym podejściem. W Wordpress możesz zbiorczo aktywować wtyczki. Co się stanie, jeśli przekierujesz w tej sytuacji? Zepsujesz aktywację niektórych wtyczek, być może nie, jeśli wtyczka jest aktywowana jako ostatnia, ale zdecydowanie psujesz wrażenia użytkownika.

cybmeta
źródło
1
Dużo rozsądniejsze podejście. +1
kaiser
Ktoś jeszcze ma problem z korzystaniem z tego, że wtyczka nie aktywuje się i zamiast tego pojawia się błąd „Nie masz uprawnień do wyświetlania tej strony”? Czy źle podpinam stronę menu? Wygląda na to, że exit;połączenie skraca aktywację.
Andy Adams,
Błąd uprawnień polega na tym, że adres URL przekierowania nie został zmieniony na 'options-general.php?page=myplugin_settings'inny i prawidłowy. W każdym razie exithak aktywacyjny jest wykonywany przed skuteczną aktywacją wtyczki, więc nie działa. Zredagowałem odpowiedź z nowym działającym kodem.
cybmeta
kod powoduje, że nagłówek jest już wysłany. Jak to naprawić?
Tokheesh VM Villa,
7

Powinieneś być w stanie to zrobić w następujący sposób:

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

AKTUALIZACJA

Nawet jeśli jest to komentarz wewnętrzny, pamiętaj:

wp_redirect () nie kończy się automatycznie i prawie zawsze powinno następować wyjście.

Konkretny przykład

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

AKTUALIZACJA 10/29/2013

Nie wspomniano o tym, ale proszę zauważyć, że moje rozwiązanie oferuje możliwość sprawdzenia, czy tak jest, czy nie przekierowania do strony ustawień wtyczek. Sprawdź my_plugin_activatei jeśli warunek w my_plugin_redirect.

Mam nadzieję, że to pomoże!

iEmanuele
źródło
Czy nie powinno być w exit()pobliżu wp_redirect()?
kaiser
2
@kaiser, odpowiedź zaktualizowana.
iEmanuele,
3

Witam, użyłem przekierowania kodu mieszka po aktywacji wtyczki. Możesz użyć tego kodu. Ładnie działa.

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
źródło
nht_ to mój prefiks wtyczki, a „edit.php? post_type = nagłówek i strona = nagłówek wiadomości” to strona przekierowująca. proszę zamień to. Więcej samouczków można zobaczyć na e2soft.com
csehasib