web-dev-qa-db-ja.com

実行する POST ホームページ上のアクションは投稿ページに行く

私のサイトのすべてのページに、私はそれぞれのアドレスにEメールを送るコンタクトフォームを持っていました。このサイトでも私はフロントページの表示を静的ページに設定しました。

連絡フォームは基本的に自分自身に投稿し、成功した場合はユーザーを新しいページに移動します。それ以外の場合は連絡フォームに固定してエラーを表示します。しかし、ホームページ上では、どんなタイプのPOSTリクエストであっても、ページを投稿ページに設定します。これは空のPOSTリクエストになる可能性があるため、私には奇妙に思えますが、それでもユーザーは投稿ページに戻りますが、URLは変わりません。これは、ホームページにPOSTを実行した場合にのみ発生します。他のすべてのページは予想通りに動作します。

何か案は?

add_action( 'wp_head', 'process_contact_form' );
function process_contact_form() {

    if( isset( $_POST['submit'] ) && $_POST['submit'] ) {
        echo'test';
    }

}

add_shortcode( 'mini-contact', 'get_mini_contact' );
function get_mini_contact( $atts = array() ) {

    extract(shortcode_atts(array(
        'title'   => 'Contact US',
        'button'  => 'Submit',
        'label'   => 'Message us',
        'subject' => 'Message'
    ), $atts));

    $html  = '';

    $html .= '<section id="quick-contact-form" class="home-solution">';
        $html .= '<div class="container">';
            $html .= '<header>';
                $html .= '<h2 class="aligncenter  type--bottom-space">' . $title . '</h2>';
            $html .= '</header>';

            $html .= '
                <form class="contact-form" method="post" action="">
                    <div class="row">
                        <div class="medium-5  columns">
                            <label>Name</label>
                            <input type="text" name="name" class="form-contact__text" />
                        </div>
                        <div class="medium-5  columns">
                            <label>E-mail</label>
                            <input type="text" name="email" class="form-contact__text" />
                        </div>
                    </div>
                    <div class="row">
                        <div class="medium-10  columns">
                            <label>Share your business problem today</label>
                            <textarea name="comment" rows="20" class="form-contact__textarea"></textarea>
                        </div>
                    </div>
                    <div class="row">
                        <div class="medium-10  columns">
                            <input type="submit" name="submit" value="' . $button . '" class="button  expand">
                        </div>
                    </div>
                    <input type="hidden" name="subject" value="' . $subject . '">
                </form>
            ';

        $html .= '</div>';
    $html .= '</section>';

    return $html;

}
1
WolfieZero

フォームを投稿するとき、あなたが入力名として 'name'を使った場合、投稿に問題があるようです。

変更してみてください。

<input type="text" name="name" class="form-contact__text" />

に:

<input type="text" name="the_name" class="form-contact__text" />

また、プラグインやテーマと競合する場合に備えて、送信ボタンにもっと一意の名前を付けることをお勧めします。それからprocess_contact_form()関数でその送信を確認します。

4
Steven Jones

これは少し古いかもしれませんが、この投稿は私が同様の問題を見つけるのを助けました。 input name = 'search'がある場合は、静的フロントページを再ロードする代わりにポストページもロードします。

0
Fengist