J'écris un module pour la connexion à distance dans un autre WP site via l'administrateur de mon plugin. C'est le code que j'utilise côté expéditeur:
<?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>';
}
}
?>
Et sur ma réception, j'ai mis le plugin avec le code suivant:
<?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;
}
}
?>
Alors, comment me connecter uniquement lorsque la variable username
est insérée dans mon tableau $_POST
? Comment puis-je exécuter la connexion uniquement lorsque je soumets le formulaire du côté de l'expéditeur?
Mon ami, ce que vous faites est correct mais vous avez simplement besoin d’une redirection, car le code exécuté avant cette fonction de connexion suppose que l’utilisateur n’est pas connecté. Voici donc un code qui fonctionnera:
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();
}
}