質問: strtolower($redirect); header("location: /bids/$redirect"); die(); } else { print ' <div class=\'row secureform__container\'> <form id=\'securedownloads\' class=\'secureform\' method=\'post\' action=\'\'> <fieldset class=\'secureform__inner\'> <label for=\'password\' class=\'secureform__label\'>password:</label> <input id=\'password\' type=\'text\' name=\'password\' maxlength=\'40\' class=\'secureform__input\'> <input type=\'submit\' value=\'login\' class=\'secureform__submit\'> <input type=\'hidden\' name=\'next\' value=\'\'> </fieldset> </form> </div> '; } ?>
回答: ブラウザーに何かをすでに印刷している場合、リダイレクトを実行する方法はありません。 (リダイレクトを行うには、適切なヘッダーをブラウザーに送信する必要があります。ヘッダーは出力の前に送信する必要があります。)したがって、リダイレクトを実行する場合は、そのようなコードをテンプレートに直接配置することはできません(すべきではありません)。それはfunctions.phpに配置し、いくつかのフックで実行する必要があります。また...アクションを設定せずにフォームを送信することは最善の方法ではありません-これはセキュリティ上の問題です。そして、wpにはすでに組み込まれているメカニズムがあり、そのようなリクエストに使用する必要があります。したがって、これを適切に行う場合は、次のようになります...functions.phpファイル:function process_my_form() { if ( ! empty($_post['password']) ) { $redirect = ($_post['password']); $redirect = str_replace(" ","-",$redirect); $redirect = strtolower($redirect); wp_redirect( "/bids/$redirect" ); die; } wp_redirect( '<url of your form>' ); // redirect back to the form, so replace it with correct url die; } add_action( 'admin_post_process_my_form', 'process_my_form' ); add_action( 'admin_post_nopriv_process_my_form', 'process_my_form' ); そしてあなたのテンプレートファイルで:<div class='row secureform__container'> <form id='securedownloads' class='secureform' method='post' action='<?php echo esc_attr( admin_url('admin-post.php') ); ?>'> <fieldset class='secureform__inner'> <label for='password' class='secureform__label'>password:</label> <input id='password' type='text' name='password' maxlength='40' class='secureform__input'> <input type='submit' value='login' class='secureform__submit'> <input type='hidden' name='next' value=''> <input type='hidden' name='action' value='process_my_form'> </fieldset> </form> </div>