web-dev-qa-db-fra.com

Puis-je changer le lien d'enregistrement par défaut (sans htaccess)?

J'utilise des URL telles que "wp-login.php? Action = register & role = patient" et le crochet "register_form" pour ajouter un formulaire de saisie supplémentaire qui dépend d'URL telles que:

add_action('register_form','add_extra_role_fields');

function add_extra_role_fields() {
if (isset($_GET['role'])) { $user_type = $_GET['role']; }

if (isset($user_type) && $user_type == "patient") [...] 
if (isset($user_type) && $user_type == "doctor") [...]

Problème : Wordpress redirige l'utilisateur après la validation du formulaire avec une erreur vers http://example.com/wp-login.php?action=register au lieu de http://example.com/wp-login.php?action=register&role=patient et de toute la logique est cassé.

Question : wordpress peut-il rediriger l'utilisateur vers l'URL précédente? "? Action = register & role = doctor" (et non par défaut "? Action = register")?

Solution : Merci Jan Fabry :).

if ( isset($_REQUEST['role']) && ( ($_REQUEST['role'] == 'patient') OR ($_REQUEST['role'] == 'doctor') ) ) {

    add_filter( 'site_url', 'doctor_site_url', 10, 4 ); 

    function doctor_site_url( $url, $path, $scheme, $blog_id ) {
        if ( 'login_post' == $scheme ) {
            $url .= '&role='.$_REQUEST['role'];
            }
        return $url;
        }
}
1
mvod

Si vous souhaitez conserver ces informations dans le $_GET, vous devrez modifier l'URL du paramètre action du formulaire . Vous pouvez le faire en vous connectant à site_url:

add_filter( 'site_url', 'wpse18418_site_url', 10, 4 );
function wpse18418_site_url( $url, $path, $scheme, $blog_id )
{
    if ( 'login_post' == $scheme ) {
        $url .= '&role=doctor'; // Or do this dynamically
    }
    return $url;
}

Mais au lieu de toujours regarder dans le $_GET, il pourrait être une solution de sauvegarder le champ role dans un champ caché et de cocher $_REQUEST - il contiendra à la fois $_GET et $_POST.

1
Jan Fabry