web-dev-qa-db-ja.com

プラグインがアクティブになったら設定ページにリダイレクトするにはどうすればいいですか?

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

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

たとえばregister_activation_hookを使用して、アクティブ化時に対応するページにリダイレクトする方法はありますか?

15

アクティベーションフックで 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' ) ) );
}

参考文献:

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

_編集_

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

16
cybmeta

あなたはこのようにそれをすることができるはずです:

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条件を確認してください。

それが役に立てば幸い!

7
iEmanuele

こんにちは私はプラグインの起動後にベローズコードのリダイレクトを使用しています。このコードを使うことができます。うまくいっています。

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