web-dev-qa-db-fra.com

Transmettre les paramètres GET à l'URL à partir d'un élément du menu principal

J'ai un formulaire de réservation sur la page "Formation" et je souhaite qu'il soit pré-rempli avec les informations de l'utilisateur connecté. Pour cela, je dois passer ces détails (nom et email) à l'URL et le formulaire devrait automatiquement les prendre et les insérer dans les champs correspondants (c'est ce que le créateur du plugin m'a conseillé de faire.).

J'ai donc essayé d'ajouter un bouton aléatoire dans une page aléatoire pointant vers la page de formation avec ces 2 paramètres ajoutés:

<a href="<?php echo esc_url( add_query_arg( array( 
                'name' => $user_name,
                'email' => $user_email
                ), site_url( '/trainings/' )))?>">Go to trainings</a>

Maintenant, cela seul ouvre l'URL suivante:

http: // mysite/trainings /? name = nom_exemple & email = exempleemail

Et jette l'erreur 'Introuvable'. Pourquoi cela peut-il être?

De plus, même si cela fonctionnait, j’aurais besoin de transmettre ces 2 paramètres à l’URL via un lien de menu principal normal, pas un bouton aléatoire. Comment puis-je m'y prendre? J'ai essayé d'ajouter le code <a> ci-dessus en tant que lien personnalisé dans le menu principal, mais cela n'a pas fonctionné.

1
puk789

Le problème 404 est parce que name est une requête WordPress var. En ajoutant cela dans l'URL, WordPress interroge une publication dont le slug correspond à tout ce qui se trouve dans le champ name, au lieu de votre page. Changez les noms de champs de votre formulaire en quelque chose que vous savez unique. C'est une bonne pratique pour tout ce que vous devez nommer: champs de formulaire, fonctions, etc.

En ce qui concerne votre question d’élément de menu, vous pouvez utiliser le filtre nav_menu_link_attributes pour modifier la href d’un élément de menu spécifique. Ici, nous vérifions si Trainings est le titre de l'élément de menu et ajoutons les paramètres GET si c'est le cas:

function wpd_add_logged_in_get_params(){
    if( is_user_logged_in() ){
        add_filter( 'nav_menu_link_attributes', function( $atts, $item ){
            if( 'Trainings' == $item->title ){
                $current_user = wp_get_current_user();
                $atts['href'] = esc_url(
                    add_query_arg(
                        array( 
                            'wpd_name' => $current_user->display_name,
                            'wpd_email' => $current_user->user_email
                        ),
                        $atts['href']
                    )
                );
            }
            return $atts;
        }, 10, 2 );
    }
}
add_action( 'template_redirect', 'wpd_add_logged_in_get_params' );
0
Milo