一旦插件被激活,如何重定向到设置页面?

时间:2013-09-17 作者:Vignesh Pichamani

我创建了自己的插件。一切似乎都很好,但我想在插件中做的一件事是在插件激活时重定向到相应的插件设置页面。

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

是否有方法在激活时重定向到相应的页面,例如register_activation_hook?

3 个回复
最合适的回答,由SO网友:cybmeta 整理而成

可能使用wp_redirect() 激活挂钩中的功能。在以下示例中myplugin_settings 是占位符。通常这只是$hook_suffix 你从$hook_suffix = add_menu_page( /* etc. */ ); 和类似功能。

THIS CODE DOESN\'T WORK, READ BELOW

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

EDIT

激活挂钩内的重定向似乎是在插件有效激活之前执行的,可能是因为在激活执行之前调用了exit()。使用activated_plugin 行动挂钩:

function cyb_activation_redirect( $plugin ) {
    if( $plugin == plugin_basename( __FILE__ ) ) {
        exit( wp_redirect( admin_url( \'options-general.php?page=myplugin_settings\' ) ) );
    }
}
add_action( \'activated_plugin\', \'cyb_activation_redirect\' );
如果在主插件文件之外使用此代码,则需要替换__FILE__ 带有主插件文件的路径。

THOUGHT

在插件激活后重定向用户不是一个很好的方法。在Wordpress中,您可以批量激活插件。如果在这种情况下执行重定向,会发生什么情况?你会破坏一些插件的激活,如果你的插件是最后一个被激活的,可能不会,但你肯定会破坏用户体验。

SO网友:iEmanuele

您应该能够这样做:

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() 不会自动退出,并且几乎总是在退出之后。

Specific example

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

UPDATE 10/29/2013

没有提到,但请注意,我的解决方案提供了检查是否存在这种情况的功能,可以重定向到插件设置页面。检查my_plugin_activate 以及中的if条件my_plugin_redirect.

希望有帮助!

SO网友:csehasib

你好,我在插件激活后使用了bellows代码重定向。您可以使用此代码。它工作得很好。

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

结束

相关推荐

调试寄存器_ACTIVATION_HOOK()

我很好奇WordPress或PHP是否存在已知的问题,环境可能会退化到WordPress忽略register\\u activation\\u hook()调用的程度。我在运行MAMP的本地环境中紧张地工作了一个小时,这时我让一位同事在她的机器上测试代码;完全相同的代码在一台机器上工作,但在另一台机器上不工作。在本例中,我只是想将消息附加到日志文件中,我正在实时跟踪该日志文件。error_log(\"Plugin code is being processed\"); register_