插件激活后如何重定向到设置页面?


16

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

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

有没有一种方法可以在激活时重定向到相应的页面,例如使用register_activation_hook

Answers:


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操作挂钩,此代码似乎可以很好地工作:

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
kaiser

其他人在使用该插件时无法激活插件而出现问题,却收到“您无权查看此页面”错误?我将菜单页面钩错了吗?exit;通话似乎缩短了激活时间。
安迪·亚当斯

权限错误是因为您尚未将重定向URL从更改'options-general.php?page=myplugin_settings'为其他有效的内容。无论如何,exit激活挂钩中的会在插件被有效激活之前执行,因此它不起作用。我用新的工作代码编辑了答案。
cybmeta 2014年

该代码导致标头已经发送..任何方法可以解决它?
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;
?>

更新10/29/2013

没有提及,但请注意,我的解决方案提供了检查是否是重定向到插件设置页面的能力。检查my_plugin_activate和中的if条件my_plugin_redirect

希望能帮助到你!


exit()周围不应该有wp_redirect()吗?
kaiser 2013年

2
@kaiser,答案已更新。
iEmanuele 2013年

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 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.