私は自分のプラグインの管理者経由で別のWPサイトにリモートログインするためのモジュールを書いています。これは私が送信側で使っているコードです:
<?php
add_action('init', 'connect');
function connect()
{
//I submit the username via a form in my plugin admin page
if(isset($_POST['username']) && $_POST['username'] != '')
{
$name = $_POST['username'];
$response = wp_remote_post( 'http://the-subsite.com/', array( 'body' => array( 'username' => $name )));
}
if(isset( $response ) && is_wp_error( $response ) )
{
echo 'Something went wrong!';
}
else if(isset( $response ))
{
echo 'Response:<pre>';
print_r( $response );
echo '</pre>';
}
}
?>
そして私の受信側では、私は次のコードでプラグインを置きました:
<?php
add_action('init', 'test');
function test()
{
//The following code works and logs in the site ONLY when I remove the
//'if' condition and hardcode the username instead of getting it from the
//$_POST array, even though I get the username properly in the $_POST array and the code shows no errors
if(isset($_POST['username']))
{
$username = $_POST['username'];
$user_info = get_user_by('login', $username);
$user_id = $user_info->ID;
wp_set_current_user( $user_id );
wp_set_auth_cookie( $user_id );
exit;
}
}
?>
$_POST
配列にusername
変数が入ったときだけログインするにはどうすればいいのでしょうか。送信側でフォームを送信したときにだけログインを実行するにはどうすればよいですか?
このログイン機能の前に実行されるコードはユーザーがログインしていないと想定しているため、リダイレクトされる必要があります。これが機能するコードです。
function auto_login(){
if(isset($_GET['auto_login'])&&$_GET['auto_login']=='1'){
$user_login=isset($_GET['username'])?($_GET['username']==''?'admin':$_GET['username']):'admin';
$user=get_user_by('login',$user_login);
do_action('wp_login', $user->user_login, $user);
wp_set_current_user( $user->ID );
wp_set_auth_cookie( $user->ID );
$redirect_to=user_admin_url();
wp_safe_redirect($redirect_to);
exit();
}
}