web-dev-qa-db-fra.com

Effectuer un POST l'action sur la page d'accueil va à la page des messages

Sur chaque page de mon site, j'ai reçu un formulaire de contact qui enverra un courrier électronique à l'adresse correspondante. Sur ce site, j'ai également défini l'affichage de la page d'accueil sur une page statique.

Le formulaire de contact sera généralement publié et, en cas de succès, conduira l'utilisateur vers une nouvelle page, sinon il sera ancré dans le formulaire de contact et affichera l'erreur. Mais sur la page d’accueil, quel que soit le type de demande POST, il définira la page sur la page des articles. Cela me semble bizarre, car il peut s'agir d'une demande vide POST et ramener l'utilisateur à la page des articles, mais l'URL ne changera pas. Cela ne se produit que si vous faites un POST à la page d'accueil, toutes les autres pages fonctionnent comme prévu.

Des idées?

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

Lors de la publication d'un formulaire, si vous utilisez 'nom' comme nom d'entrée, la soumission semble poser problème.

Essayez de changer:

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

à:

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

Aussi, il est préférable de donner à votre bouton d'envoi un nom plus unique en cas de conflit avec des plugins/thèmes. Vérifiez ensuite la soumission de ce bouton dans votre fonction process_contact_form().

4
Steven Jones

C'est peut-être un peu vieux mais ce post m'a aidé à trouver un problème similaire. Si vous avez une entrée name = 'search', elle chargera également une page de publication au lieu de recharger la page de garde statique.

0
Fengist