独自のプラグインを作成しました。すべては問題ないように見えますが、そのプラグインでやりたいことの1つは、プラグインがアクティブになったときに対応するプラグイン設定ページにリダイレクトすることです。
例えば:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator
たとえば、アクティベーション時に対応するページにリダイレクトする方法はありregister_activation_hook
ますか?
独自のプラグインを作成しました。すべては問題ないように見えますが、そのプラグインでやりたいことの1つは、プラグインがアクティブになったときに対応するプラグイン設定ページにリダイレクトすることです。
例えば:
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アクションhoook を使用してうまく機能するようです:
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;
?>
更新日2013年10月29日
言及されていませんでしたが、私のソリューションには、プラグイン設定ページへのリダイレクトを行うかどうかを確認する機能があります。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");
}
}
}