web-dev-qa-db-ja.com

postの代わりにGet変数を使用してwordpressにログインします。

私の会社のサイトとドキュメントを索引付けするのにswish-eを使っている。問題は、get変数を介してwordpressにログインする必要があることです。 Wordpressのログインではpost変数を使用していますが、GET変数でログインする必要があります

http://mysite.com/wp-login.php?log=username&pwd=password

簡単な方法はありますか?コアファイルを変更しても構いません。他に選択肢はありません。

私はwp-login.phpを見ましたが、私はこれを行う方法についての手がかりを持っていません。

よろしく

2
chifliiiii

ユーザー名とパスワードにGET変数を使用することはお勧めできません。しかしとにかく、次のようなものでうまくいくはずです。

if(isset($_GET['log']) && isset($_GET['pwd'])){
    $creds = array();
    $creds['user_login'] = $_GET['log'];
    $creds['user_login'] = $_GET['pwd'];
    $creds['remember'] = true; //Do you want the log-in details to be remembered?

    $user = wp_signon( $creds, false );
    if ( is_wp_error($user) )
       echo $user->get_error_message(); //Display error message if log-in fails
}

これをテンプレートに入れてから、そのテンプレートを使用して別のログインページを作成するためのページを作成できます。その場合は、http:// [ページのURL]?log = username&pwd = passwordにアクセスしてください。

http://mysite.com/wp-login.php?log=username&pwd=password を取得するには、上記のコードをwp-login.phpコアファイル。コードを修正するのではなく(次回​​WordPressを更新したときに上書きされます)、フックを使用することをお勧めします。同様に、(これをあなたのfunctions.phpまたはプラグインに入れてください):

add_action('init', 'GET_login');
function GET_login() {
    //Check that we are on the log-in page
    if(in_array($GLOBALS['pagenow'], array('wp-login.php'))):

    //Check that log and pwd are set
        if(isset($_GET['log']) && isset($_GET['pwd'])):
            $creds = array();
            $creds['user_login'] = $_GET['log'];
            $creds['user_password'] = $_GET['pwd'];
            $creds['remember'] = true; //Do you want the log-in details to be remembered?

            //Where do we go after log-in?
            $redirect_to = admin_url('profile.php');

            //Try logging in
            $user = wp_signon( $creds, false );

            if ( is_wp_error($user) ){
                //Log-in failed
            }else{
                //Logged in, now redirect
                $redirect_to = admin_url('profile.php');
                wp_safe_redirect($redirect_to);
            exit();
            }
        endif;
    endif;
    //If we are not on the log-in page or credentials are not set, carry on as normal
}

説明:この関数はinitフックを使用して実行されます。まず./wp-login.phpページにいることを確認し、次にlogpwd変数が設定されていることを確認します。そうでない場合は、通常どおり続行します。もしそうなら、wp_signonを使ってログインを試みます。成功すれば(あなたが好きなところならどこにでも)リダイレクトされます。失敗した場合は何かを行います(表示エラー、多分?)。

それが役立つことを願っています

4
Stephen Harris