问题描述
我创建了我自己的插件。一切似乎都可以,但是当插件被激活时,我想在该插件中做一件事就是重定向到相应的插件设置页面。
例如: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' ) ) );
}
参考文献:
编辑
激活钩子中的重定向似乎在插件被有效激活之前执行,也许是因为在执行激活之前调用了 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_activate
和 my_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。