問題描述

我創建了我自己的插件。一切似乎都可以,但是當插件被激活時,我想在該插件中做一件事就是重定向到相應的插件設置頁面。

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

有沒有辦法在激活時重定向到相應的頁面,例如用 register_activation_hook

最佳解決方案

也許在激活鈎子中使用 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. Register activation hook

  2. admin_url()

編輯

激活鈎子中的重定向似乎在插件被有效激活之前執行,也許是因為在執行激活之前調用了 exit() 。這段代碼好像使用 activated_plugin 動作好了:

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 中,您可以批量激活插件。那麼在這種情況下執行重定向會發生什麼呢?你會破壞一些插件的激活,也許不是如果您的插件是最後被激活,但絕對你打破了用户體驗。

次佳解決方案

你應該可以這樣做:

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

UPDATE

即使是內聯評論,請記住:

wp_redirect() does not exit automatically and should almost always be followed by exit.

具體例子

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

更新 10/29/2013

沒有提及,但請注意,我的解決方案提供了檢查是否可以進行重定向到插件設置頁面的能力。檢查 my_plugin_activatemy_plugin_redirect 中的 if 條件。

希望有幫助!

第三種解決方案

你好我插件激活後使用波紋管代碼重定向。你可以使用這段代碼。它的工作很好

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

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。