Как перенаправить на страницу настроек после активации плагина?

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 ()

РЕДАКТИРОВАТЬ

Перенаправление внутри ловушки активации, кажется, выполняется до эффективной активации плагина, возможно, из-за вызова exit () перед выполнением активации. Этот код , кажется, хорошо работать , используя activated_plugin действия 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' );

Если вы используете этот код вне основного файла плагина, вам нужно будет указать __FILE__путь к основному файлу плагина.

ПОДУМАЛ

Перенаправление пользователя после активации вашего плагина не очень хороший подход. В Wordpress вы можете активировать плагины оптом. Что произойдет, если вы выполните перенаправление в этой ситуации? Вы прервете активацию некоторых плагинов, возможно, не если ваш плагин активируется последним, но вы определенно нарушаете пользовательский интерфейс.

cybmeta
источник
1
Гораздо разумнее подход. +1
кайзер
У кого-то еще возникает проблема с использованием этого, когда плагин не активируется, и вместо этого появляется ошибка «У вас нет разрешения на просмотр этой страницы»? Я неправильно перехватываю свою страницу меню? Похоже, exit;звонок прерывает активацию.
Энди Адамс
Ошибка разрешения связана с тем, что вы не изменили URL перенаправления с какого- 'options-general.php?page=myplugin_settings'либо другого и действительного. В любом случае, exitловушка активации выполняется до эффективной активации плагина, поэтому он не работает. Я отредактировал ответ с новым рабочим кодом.
Cybmeta
код приводит к тому, что заголовок уже отправлен .. какой способ это исправить?
Latheesh В.М. Вилла
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.

Надеюсь, это поможет!

iEmanuele
источник
Не должно ли быть 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");
    }
 }
}
csehasib
источник
nht_ - это мой префикс плагина, а "edit.php? post_type = headline & page = news-headline" - страница перенаправления. пожалуйста замените это те. Вы можете увидеть больше учебника на e2soft.com
csehasib