自分でプラグインを作成しました。すべて問題ないようですが、そのプラグインで実行したいことの1つは、プラグインがアクティブになったときに対応するプラグイン設定ページにリダイレクトされることです。
例えば: http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator
たとえばregister_activation_hook
を使用して、アクティブ化時に対応するページにリダイレクトする方法はありますか?
アクティベーションフックで wp_redirect()
関数を使うかもしれません。次の例では、myplugin_settings
がプレースホルダーです。通常これは単に$hook_suffix = add_menu_page( /* etc. */ );
やそれに似た関数から得られる$hook_suffix
です。
このコードは機能しません。以下をお読みください
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' ) ) );
}
参考文献:
_編集_
アクティベーションフック内のリダイレクトは、プラグインが効果的にアクティベートされる前に実行されているようです。このコードは activated_plugin actionフックを使ってうまく動作するようです:
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() は自動的には終了せず、ほとんどの場合はその後にexitが続きます。
具体例
<?php
wp_redirect( $location, $status );
exit;
?>
UPDATE 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");
}
}
}