「トレーニング」ページに予約フォームがあり、ログインユーザーの詳細を事前に記入しておく必要があります。そのために私はそれらの詳細(名前と電子メール)を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>
コードを追加しようとしましたが、うまくいきませんでした。
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' );