私は(公衆に面した)フォームで使用する一回だけを作成しようとしています。
以下が私のコードです:
function my_form() {
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$description = $_POST['description'];
$output_form = false;
if (wp_verify_nonce($_POST['added'], 'add-item') )
{
//validate
echo 'form submitted with nonce correctly';
}
} else {
$output_form = true;
}
if ($output_form) {
?>
<form method="post" action="">
<?php wp_nonce_field('add-item','added'); ?>
<label>Title:</label><br/>
<input type="text" name="name" value="<?php echo $name; ?>"/><br/>
<label>Description:</label><br />
<textarea name="description" rows="3" cols="10"><?php echo $description; ?></textarea><br/>
<input type="submit" name="submit" value="submit">
</form>
<?php
}
}
add_shortcode('PODS FORM', my_form);
自分のフォームを自分のページに表示できますが、送信したとき(そして正しく入力したとき)、正しいメッセージが表示されるのではなく、空白のページしか表示されません。
Nonceフィールドの値を wp_verify_nonce の最初の引数として渡す必要があります。それで、あなたはあなたのコードの中の一回限りの検証部分を修正する必要があります。
また、内部のワードプレスクエリ変数と競合するフォームフィールド名を使用していました。ワードプレスと競合しないように、それらに固有のものをプレフィックスとして付ける必要があります。次の例を参照してください。
function my_form() {
if (isset($_POST['pf_submit'])) {
$name = $_POST['pf_name'];
$description = $_POST['pf_description'];
$output_form = false;
if (isset( $_POST['pf_added'] ) && wp_verify_nonce($_POST['pf_added'], 'add-item') )
{
//validate
echo 'form submitted with nonce correctly';
}
} else {
$output_form = true;
$name = "";
$description = "";
}
if ($output_form) {
?>
<form method="post" action="">
<?php wp_nonce_field('add-item','pf_added'); ?>
<label>Title:</label><br/>
<input type="text" name="pf_name" value="<?php echo $name; ?>"/><br/>
<label>Description:</label><br />
<textarea name="pf_description" rows="3" cols="10"><?php echo $description; ?></textarea><br/>
<input type="submit" name="pf_submit" value="submit">
</form>
<?php
}
}
add_shortcode('PODS FORM', my_form);