web-dev-qa-db-ja.com

メインメニュー項目からURLにGETパラメータを渡す

「トレーニング」ページに予約フォームがあり、ログインユーザーの詳細を事前に記入しておく必要があります。そのために私はそれらの詳細(名前と電子メール)をURLに渡す必要があり、フォームは自動的にそれらの詳細を取り、対応するフォームフィールドに挿入するべきです(それは私がプラグイン作成者によってするように勧められたものです)。

だから私はそれらの2つのパラメータが追加されたトレーニングページを指すランダムページの中にランダムボタンを追加しようとしました:

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

これだけで次のURLが開きます。

http:// mysite/trainings /?name = examplename&email = exampleemail

そして、「見つかりません」というエラーが発生します。なぜこれができますか?

さらに、これでうまくいったとしても、ランダムボタンではなく、通常のメインメニューリンクを介してこれら2つのパラメータをURLに渡す必要があります。どうすればいいの?メインメニューへのカスタムリンクとして上記の<a>コードを追加しようとしましたが、うまくいきませんでした。

1
puk789

404の問題はnameがWordPressのクエリ変数であるためです。 URLにそれを追加すると、WordPressはあなたのページの代わりにnameフィールドにあるものに一致するslugを持つ投稿を問い合わせます。あなたのフォームフィールド名をあなたが知っているものに変更してください。これは、フィールド、関数などに名前を付けるために必要なことすべてに適しています。

あなたのメニュー項目の質問に関しては、あなたは特定のメニュー項目のためのhrefを変更するためにnav_menu_link_attributesフィルタを使うことができます。ここではTrainingsがメニュー項目のタイトルかどうかをチェックし、そうであればGETパラメータを追加します。

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