Cum creez un link pentru resetarea parolei?
Am configurat fluxul de înregistrare astfel încât utilizatorii mei trebuie să completeze un formular de înregistrare Gravity Forms și apoi să-și activeze contul printr-un link din email. Link-ul din email îi trimite către o pagină care le spune dacă înregistrarea a fost cu succes sau a eșuat. La activarea cu succes, aș dori ca utilizatorii mei să poată da click pe un link de resetare a parolei pe pagina de succes pentru a-și seta parola. Primesc constant un mesaj de link invalid când construiesc link-ul de resetare. Cum pot construi un link valid de resetare a parolei? Iată ce am până acum:
<?php
global $gw_activate_template;
extract( $gw_activate_template->result );
$url = is_multisite() ? get_blogaddress_by_id( (int) $blog_id ) : home_url('', 'http');
$user = new WP_User( (int) $user_id );
?>
<h2><?php _e('Contul tău este acum activ!'); ?></h2>
<div id="signup-welcome">
<p><span class="h3"><?php _e('Nume utilizator:'); ?></span> <?php echo $user->user_login ?></p>
<p>Pentru a-ți seta parola, selectează următorul link: <a href="http://example.com/wp-login.php?action=rp&key=<?php echo $gw_activate_template->get_activation_key(); ?>&login=<?php echo $user->user_login; ?>" >http://example.com/wp-login.php?action=rp&key=<?php echo $gw_activate_template->get_activation_key(); ?>&login=<?php echo $user->user_login; ?></a></p>
</div>
<?php if ( $url != network_home_url('', 'http') ) : ?>
<p class="view"><?php printf( __('Contul tău este acum activat. <a href="%1$s">Vezi site-ul</a> sau <a href="%2$s">Autentifică-te</a>'), $url, $url . 'wp-login.php' ); ?></p>
<?php else: ?>
<p class="view"><?php printf( __('Contul tău este acum activat. <a href="%1$s">Autentifică-te</a> sau întoarce-te la <a href="%2$s">pagina principală</a>.' ), network_site_url('wp-login.php', 'login'), network_home_url() ); ?></p>
<?php endif; ?>

După multă cercetare, am ajuns să examinez fișierul de bază al WordPress wp_login.php în speranța că WP va arăta cum se face acest lucru într-un mod mai puțin obscur. Din informațiile de pe lângă linia 331 (WP 4.6.1), am asamblat următorul cod.
<?php
global $gw_activate_template;
extract( $gw_activate_template->result );
$url = is_multisite() ? get_blogaddress_by_id( (int) $blog_id ) : home_url('', 'http');
$user = new WP_User( (int) $user_id );
$adt_rp_key = get_password_reset_key( $user );
$user_login = $user->user_login;
$rp_link = '<a href="' . network_site_url("wp-login.php?action=rp&key=$adt_rp_key&login=" . rawurlencode($user_login), 'login') . '">' . network_site_url("wp-login.php?action=rp&key=$adt_rp_key&login=" . rawurlencode($user_login), 'login') . '</a>';
if ( is_wp_error( $key ) ) {
return $key;
}
?>
<h2><?php _e('Contul tău este acum activ!'); ?></h2>
<div id="signup-welcome">
<p><span class="h3"><?php _e('Nume de utilizator:'); ?></span> <?php echo $user->user_login ?></p>
<p>Pentru a-ți seta parola, selectează următorul link: <?php echo $rp_link; ?></p>
</div>
Lucrul important pentru construirea link-ului este cheia care este generată de get_password_reset_key( $user ); Aceasta este o cheie stocată în baza de date care permite utilizatorului să-și schimbe parola. Am văzut un site web care o referă drept "cookie"; totuși, aceasta folosește o definiție largă a termenului "cookie", deoarece nimic nu este stocat pe computerul utilizatorului. Cheia este stocată în baza de date și este legată de contul utilizatorului.

Nu sunt sigur ce link încerci să construiești și cum se leagă de specificul Gravity Forms (întrebările despre care sunt mai bine direcționate către ei :)
În cazul nativ al WordPress, metoda API pentru a genera link-ul de recuperare a parolei este generată astfel: wp_lostpassword_url( home_url() )
(argumentul redirect opțional) iar URL-ul rezultat are următorul format: http://example.com/wp-login.php?action=lostpassword&redirect_to=http://example.com
.

Caut să creez un link similar cu acest exemplu: http://example.com/wp-login.php?action=rp&key=WhatKey&login=user_login
Aș prefera să nu folosesc link-ul standard de recuperare a parolei, deoarece acesta necesită ca utilizatorul să introducă o adresă de email către care este trimis link-ul de resetare a parolei. Doresc ca link-ul meu să ducă direct la pagina de resetare a parolei.
