プラグインがアクティブになったら設定ページにリダイレクトする方法は?


16

独自のプラグインを作成しました。すべては問題ないように見えますが、そのプラグインでやりたいことの1つは、プラグインがアクティブになったときに対応するプラグイン設定ページにリダイレクトすることです。

例えば:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

たとえば、アクティベーション時に対応するページにリダイレクトする方法はありregister_activation_hookますか?

回答:


17

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' ) ) );
}

参照:

  1. アクティベーションフックを登録する
  2. admin_url()

編集

アクティベーションフック内のリダイレクトは、おそらくアクティベーションが実行される前に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では、プラグインを一括で有効化できます。この状況でリダイレクトを実行するとどうなりますか?プラグインの最後のアクティブ化ではない場合もありますが、一部のプラグインのアクティブ化は中断されますが、間違いなくユーザーエクスペリエンスが中断されます。


1
多くの賢明なアプローチ。+1
kaiser

プラグインの有効化に失敗し、代わりに「このページを表示する権限がありません」というエラーが表示される、これを使用して問題を抱えている人はいますか?メニューページを間違ってフックしていますか?exit;呼び出しがアクティベーションを短くカットしているようです。
アンディアダムス14

許可エラーは、リダイレクトURLを'options-general.php?page=myplugin_settings'別の有効なものに変更していないためです。とにかく、exitプラグインが効果的にアクティブ化される前に、アクティベーションフックが実行されるため、機能しません。新しい作業コードで回答を編集しました。
サイブメタ14

コードはすでにヘッダーが送信されています..それを修正する方法はありますか?
Latheesh VMヴィラ

7

次のように実行できるはずです。

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()
カイザー

2
@kaiser、回答が更新されました。
-iEmanuele

3

こんにちは、プラグインのアクティベーション後にベローズコードリダイレクトを使用しました。このコードを使用できます。うまく機能しています。

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");
    }
 }
}

nht_はプラグインのプレフィックスで、「edit.php?post_type = headline&page = news-headline」はリダイレクトページです。これらを交換してください。e2soft.comで
csehasib
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.