投稿ページ&チェックアウトページの2つのページを作成しました。
投稿ページ私は以下のコードを持っている:
<?php
if(isset($_POST['submitnow'])) {
global $wpdb;
$wpdb->insert(
'wp9c_treetweet',
array(
'name' => $_POST['aname'],
'amt' => $_POST['aamt'],
'dept' => $_POST['adept']
),
array(
'%s',
'%d',
'%s'
)
);
}
?>
<form action="" method="POST" id="addcourse">
<label>Name:<input type="text" name="aname" size="30" required></label>
<label>Amount:<input type="text" name="aamt" size="30" required></label>
<label>Department:<input type="text" name="adept" size="30" required></label>
<input type="submit" name="submitnow" id="addcoursesubmit" value="Submit">
</form>
このコードは問題なく機能し、フォームデータをデータベースに正しく挿入しています。
このページをチェックアウトページにリダイレクトするにはfunctions.phpに次のコードを追加しました。
function redirect_from_checkout() {
if( !isset( $_POST['submitnow'] ) )
return;
wp_redirect( home_url( '/checkout/' ) );
exit;
}
add_action( 'template_redirect', 'redirect_from_checkout' );
functions.phpにリダイレクトコードを追加した後、リダイレクトは正しく機能していますが、フォームデータがデータベーステーブルに挿入されていません。
Plzは解決策を教えてくれます。
template_redirect
フックについての WordPress Codex によると:
このアクションフックは、WordPressがどのテンプレートページを読み込むかを決定する直前に実行されます。
そのため、テンプレートがロードされる前にユーザーを別のページにリダイレクトしています。フォームはまったくロードされません。 template_redirect
のように、wp_footer
の後に実行される別のフックを使うことができます。
コードを次のように変更して、データベースにフォームを挿入した直後にユーザーをリダイレクトすることもできます。
<?php
if(isset($_POST['submitnow'])) {
global $wpdb;
$wpdb->insert(
'wp9c_treetweet',
array(
'name' => $_POST['aname'],
'amt' => $_POST['aamt'],
'dept' => $_POST['adept']
),
array(
'%s',
'%d',
'%s'
)
);
wp_safe_redirect(home_url( '/checkout/' ));
exit();
}
?>
このように、フォームが挿入された場合、ユーザーはその後リダイレクトされます。