問題描述
我建立了我自己的外掛。一切似乎都可以,但是當外掛被啟用時,我想在該外掛中做一件事就是重定向到相應的外掛設定頁面。
例如: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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。