Je veux créer un nouveau moyen de connexion.
Ce que je dois faire maintenant:
Ce dont j'ai encore besoin:
Je pourrais le faire si je pouvais écraser la fonction wp_signon
, mais ce n’est pas possible.
Une autre alternative?
Vous pouvez utiliser cette fonction dans functions.php
de votre thème actuel. Un champ supplémentaire apparaîtra sur le formulaire de connexion.
###################Code starts here ###################
<?php
add_action('login_form', 'add_login_field');
function add_login_field()
{
?>
<p>
<label for="user_pass">My Input<br>
<input type="text" name="my_name" value=""/>
</p>
<?php
}
function do_anything($user) {
//do stuff
$userdata= $user = get_userdatabylogin($user);
$user_id = $userdata->ID;
$my_name = $_POST['my_name'];
add_user_meta( $user_id, 'my_name', $my_name);
}
add_action('wp_login', 'do_anything');
?>
############## CODE ENDS HERE ###################
Le code ci-dessus créera un champ supplémentaire sur le formulaire de connexion. Cette valeur sera affichée avec d'autres valeurs pouvant être reçues dans la fonction "do_anything($user)
". Enfin, cette valeur peut être enregistrée en tant que méta utilisateur.
Partie 2 ====================================== ================================
add_action('login_form', 'add_login_field');
function add_login_field()
{
?>
<p>
<label for="user_pass">My Input<br>
<input type="text" name="my_name" value=""/>
</p>
<?
}
function do_anything($user) {
//do stuff
$userdata= $user = get_userdatabylogin($user);
$user_id = $userdata->ID;
$my_name = $_POST['my_name'];
add_user_meta( $user_id, 'my_name', $my_name);
}
add_action('wp_login', 'do_anything');
add_filter('authenticate', 'check_login', 10, 3);
function check_login($user, $username, $password) {
global $wpdb;
if(isset($_POST['my_name']) && trim($_POST['my_name'])!="")
{
$customfield = $_POST['my_name'];
$UsermetaData = $wpdb->get_results("SELECT *FROM wp_usermeta WHERE meta_value='$customfield'");
$user = get_user_by('id', $UsermetaData[0]->user_id );
// Redirect URL //
if ( !is_wp_error( $user ) )
{
wp_clear_auth_cookie();
wp_set_current_user ( $user->ID );
wp_set_auth_cookie ( $user->ID );
$redirect_to = user_admin_url();
wp_safe_redirect( $redirect_to );
exit();
}
return $user;
}
}
Veuillez vérifier cet extrait de code. Aussi, vous devez modifier le code selon les exigences. Assurez-vous que le champ "mon_nom" reste unique et qu'il ne sera pas mis à jour à chaque connexion.
Si vous voulez intercepter l'entrée avant la fin de la connexion, je pense que vous pourriez simplement accrocher l'action wp_authenticate et y exécuter votre script.
"Cette action est située dans wp_signon. Contrairement à l'action wp_login, elle est exécutée avant le processus d'authentification WordPress."