Як перенаправити на сторінку налаштувань, коли плагін активований?


16

Я створив власний плагін. Все здається нормальним, але одне, що я хочу зробити в цьому плагіні, це перенаправлення на відповідну сторінку налаштувань плагіна, коли плагін активований.

Наприклад:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

Чи є спосіб перенаправлення на відповідну сторінку при активації, наприклад, з register_activation_hook?

Відповіді:


17

Можливо, використовуючи wp_redirect()функцію в гачку активації. У наступному прикладі myplugin_settings- заповнювач. Зазвичай це просто $hook_suffixповернення $hook_suffix = add_menu_page( /* etc. */ ); та подібні функції.

ЦИЙ КОД НЕ ПРАЦЮЄ, ЧИТАЙТЕ НІЖ

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

Список літератури:

  1. Зареєструйте гачок активації
  2. admin_url ()

EDIT

Здається, переадресація всередині гачка активації виконується до того, як плагін буде ефективно активований, можливо, через виклик exit () перед активацією активації. Цей код, здається, працює добре, використовуючи активоване з'єднання активованих плагінів:

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

Якщо ви використовуєте цей код поза основним файлом плагіну, вам потрібно буде повторити __FILE__параметр основного файлу плагіна.

ДУМКА

Перенаправлення користувача після активації плагіна - це не дуже вдалий підхід. У Wordpress ви можете активувати плагіни оптом. Що ж станеться, якщо ви виконаєте переспрямування в цій ситуації? Ви зламаєте активацію деяких плагінів, можливо, ні, якщо ваш плагін останній активується, але, безумовно, ви порушуєте досвід користувача.


1
Набагато безпечніший підхід. +1
кайзер

Хто-небудь ще отримує проблему, використовуючи цю проблему, якщо плагін не активується, і ви отримуєте помилку "Ви не маєте дозволу на перегляд цієї сторінки"? Я неправильно підключив свою сторінку меню? Здається, що exit;дзвінок перериває активацію.
Енді Адамс

Помилка дозволу полягає в тому, що ви не змінили URL-адресу переадресації 'options-general.php?page=myplugin_settings'на щось інше та дійсне. У будь-якому випадку exitгачок активації виконується до того, як плагін буде ефективно активований, тому він не працює. Я відредагував відповідь новим робочим кодом.
cybmeta

код приводить до того, що заголовок вже надісланий. Який спосіб виправити це?
Latheesh VM Villa

7

Ви повинні мати змогу зробити це так:

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

ОНОВЛЕННЯ

Навіть якщо це вбудований коментар, пам’ятайте:

wp_redirect () не виходить автоматично, і майже завжди повинен слідувати вихід.

Конкретний приклад

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

ОНОВЛЕННЯ 29.10.2013

Про це не згадувалося, але зауважте, що моє рішення пропонує можливість перевірити, чи це так, чи не робити перенаправлення на сторінку налаштувань плагіна. Перевірте my_plugin_activateі чи є стан у my_plugin_redirect.

Сподіваюся, це допомагає!


Чи не повинно бути exit()навколо wp_redirect()?
кайзер

2
@kaiser, відповідь оновлена.
iEmanuele

3

Здравствуйте, я використовував наступний код переадресації після активації плагіна. Ви можете використовувати цей код. Це гарно працює.

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_ - мій префікс плагіну & "edit.php? post_type = headline & page = news-headline" - це сторінка переспрямування. будь ласка, замініть ці. Більше навчального посібника ви можете переглянути на e2soft.com
csehasib
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.