我创建了自己的插件。一切似乎都不错,但是我想在该插件中做的一件事是在激活插件时将其重定向到相应的插件设置页面。
例如:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator
有没有一种方法可以在激活时重定向到相应的页面,例如使用register_activation_hook
?
我创建了自己的插件。一切似乎都不错,但是我想在该插件中做的一件事是在激活插件时将其重定向到相应的插件设置页面。
例如:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator
有没有一种方法可以在激活时重定向到相应的页面,例如使用register_activation_hook
?
Answers:
也许使用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' ) ) );
}
参考文献:
编辑
激活挂钩内部的重定向似乎是在有效激活插件之前执行的,这可能是由于在执行激活之前调用了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中,您可以批量激活插件。如果您在这种情况下执行重定向,会发生什么情况?您将中断某些插件的激活,如果您的插件是最后被激活的,则可能不会,但您肯定会破坏用户体验。
exit;
通话似乎缩短了激活时间。
'options-general.php?page=myplugin_settings'
为其他有效的内容。无论如何,exit
激活挂钩中的会在插件被有效激活之前执行,因此它不起作用。我用新的工作代码编辑了答案。
您应该可以这样做:
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()
吗?
您好,我在插件激活后使用了波纹管代码重定向。您可以使用此代码。运行良好。
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");
}
}
}