无法提交我的 wordpress 联系表

Unable to submit my wordpress contact form

我想创建一个 wordpress 扩展程序以在我创建的网站上显示联系表单。我是 wordpress 的初学者,我找不到解决问题的方法。 表单未发送,我在 deliver_mail() 函数中创建的错误消息始终显示,但我不明白为什么? 这是我的代码。 感谢您的回答!

<?php

// FORMULAIRE DE CONTACT HTML
// ##########################
function html_form_code() {

    echo ('
    <section class="section-form d-flex flex-column justify-content-center align-items-center">
        <div class="container text-center mt-5">
            <h2 class="fs-3">Une question, une demande de devis&nbsp;?</h2>
            <p>Remplissez le formulaire ci-dessous, nous vous recontacterons rapidement&nbsp;!</p>
        </div>
        <form action="  '. esc_url( $_SERVER['REQUEST_URI'] ) .'" method="post" class="container mt-3 p-4">
            <div class="form-floating mb-3">
                <input type="text" class="form-control" name="cf-name" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["cf-name"] ) ? esc_attr( $_POST["cf-name"] ) : '' ) . ' " size="40"/>
                <label for="floatingInput">Nom</label>
            </div>
            <div class="form-floating mb-3">
                <input type="text" class="form-control" name="cf-firstname" value=" ' . ( isset( $_POST["cf-firstname"] ) ? esc_attr( $_POST["cf-firstname"] ) : '' ) . ' " size="40" >
                <label for="floatingInput">Prénom</label>
            </div>
            <div class="form-floating mb-3">
                <input type="email" class="form-control" name="cf-email" value=" ' . ( isset( $_POST["cf-email"] ) ? esc_attr( $_POST["cf-email"] ) : '' ) .' " size="40" >
                <label for="floatingInput">Email</label>
            </div>
            <div class="form-floating mb-3">
                <input type="tel" class="form-control" name="cf-tel" value="' . ( isset( $_POST["cf-tel"] ) ? esc_attr( $_POST["cf-tel"] ) : '' ) . ' " size="40" >
                <label for="floatingInput">Téléphone</label>
            </div>
            <div class="form-floating mb-3">
                <input type="text" class="form-control" name="cf-address" value="' . ( isset( $_POST["cf-address"] ) ? esc_attr( $_POST["cf-address"] ) : '' ) . '" size="250" >
                <label for="floatingInput">Adresse</label>
            </div>
            <div class="form-floating mb-3">
                <input type="text" class="form-control" name="cf-postal" value="  ' . ( isset( $_POST["cf-postal"] ) ? esc_attr( $_POST["cf-postal"] ) : '' ) . '" size="10" >
                <label for="floatingInput">Code postal</label>
            </div>
            <div class="form-floating mb-3">
                <input type="text" class="form-control"name="cf-city" value="' . ( isset( $_POST["cf-city"] ) ? esc_attr( $_POST["cf-city"] ) : '' ) . '" size="250" >
                <label for="floatingInput">Ville</label>
            </div>
            <div>
                <p class="fs-5 mt-4">Votre demande concerne&nbsp;:</p>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" name="cf-help" value="' . ( isset( $_POST["cf-help"] ) ? esc_attr( $_POST["cf-help"] ) : '' ) . '"/>
                    <label class="form-check-label" for="flexCheckDefault">
                        Les Aides de l\'État
                    </label>
                </div>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" name="cf-contract" value="' . ( isset( $_POST["cf-contract"] ) ? esc_attr( $_POST["cf-contract"] ) : '' ) . '">
                    <label class="form-check-label" for="flexCheckChecked">
                        Nos Contrats d\'Entretien
                    </label>
                </div>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" name="cf-quote" value="' . ( isset( $_POST["cf-quote"] ) ? esc_attr( $_POST["cf-quote"] ) : '' ) . '"/>
                    <label class="form-check-label" for="flexCheckChecked">
                        Une Demande de Devis
                    </label>
                </div>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" name="cf-other" value="' . ( isset( $_POST["cf-other"] ) ? esc_attr( $_POST["cf-other"] ) : '' ) . '"/>
                    <label class="form-check-label mb-4" for="flexCheckChecked">
                        Autre
                    </label>
                </div>
            </div>
            <div class="form-floating mb-3">
                <textarea class="form-control"></textarea>
                <label for="floatingInput">Votre message</label>
            </div>
            <button type="submit" class="btn button-primary mt-3" name="cf-submitted">Envoyer</button>
        </form>
    </section>') ;

}

// ENVOYER LES DONNEES A L ADMIN
// ##############################
function deliver_mail() {

    // if the submit button is clicked, send the email
    if ( isset( $_POST['cf-submitted'] ) ) {

        // sanitize form values
        $name = sanitize_text_field( $_POST["cf-name"] );
        $firstname = sanitize_text_field( $_POST["cf-firstname"] );
        $email   = sanitize_email( $_POST["cf-email"] );
        $tel = sanitize_text_field( $_POST["cf-tel"] );
        $address = sanitize_text_field( $_POST["cf-address"] );
        $postal = sanitize_text_field( $_POST["cf-postal"] );
        $city = sanitize_text_field( $_POST["cf-city"] );
        $message = esc_textarea( $_POST["cf-message"] );

        // get the blog administrator's email address
        $to = get_option( 'admin_email' );

        $headers = "From: $name <$email>" . "\r\n";

        // If email has been process for sending, display a success message
        if ( wp_mail( $to, $subject, $message, $headers ) ) {
            echo '<div>';
            echo '<p>Merci de votre envoi, nous vous recontacterons très vite !</p>';
            echo '</div>';
        } else {
            echo 'Echec lors de la validation du formulaire';
        }
    }

}

// APPELLEE LORSQUE LE SHORTCODE EST ACTIF
// #######################################
function cf_shortcode() {

    ob_start();
    deliver_mail();
    html_form_code();
    return ob_get_clean();

}

add_shortcode( 'sitepoint_contact_form', 'cf_shortcode' );



这里有一些问题。您没有主题,您的文本区域也没有名称。另外,你可以制作这个 function/shortcode.

此外,我没有使用 $_SERVER 超全局,而是使用了 $wp->request

function cf_shortcode() {
    ob_start();
    global $wp;
    echo ( '
    <section class="section-form d-flex flex-column justify-content-center align-items-center">
        <div class="container text-center mt-5">
            <h2 class="fs-3">Une question, une demande de devis&nbsp;?</h2>
            <p>Remplissez le formulaire ci-dessous, nous vous recontacterons rapidement&nbsp;!</p>
        </div>
        <form action="  ' . esc_url( home_url( $wp->request ) ) . '" method="post" class="container mt-3 p-4">
            <div class="form-floating mb-3">
                <input type="text" class="form-control" name="cf-name" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST['cf-name'] ) ? esc_attr( $_POST['cf-name'] ) : '' ) . ' " size="40"/>
                <label for="floatingInput">Nom</label>
            </div>
            <div class="form-floating mb-3">
                <input type="text" class="form-control" name="cf-firstname" value=" ' . ( isset( $_POST['cf-firstname'] ) ? esc_attr( $_POST['cf-firstname'] ) : '' ) . ' " size="40" >
                <label for="floatingInput">Prénom</label>
            </div>
            <div class="form-floating mb-3">
                <input type="email" class="form-control" name="cf-email" value=" ' . ( isset( $_POST['cf-email'] ) ? esc_attr( $_POST['cf-email'] ) : '' ) . ' " size="40" >
                <label for="floatingInput">Email</label>
            </div>
            <div class="form-floating mb-3">
                <input type="tel" class="form-control" name="cf-tel" value="' . ( isset( $_POST['cf-tel'] ) ? esc_attr( $_POST['cf-tel'] ) : '' ) . ' " size="40" >
                <label for="floatingInput">Téléphone</label>
            </div>
            <div class="form-floating mb-3">
                <input type="text" class="form-control" name="cf-address" value="' . ( isset( $_POST['cf-address'] ) ? esc_attr( $_POST['cf-address'] ) : '' ) . '" size="250" >
                <label for="floatingInput">Adresse</label>
            </div>
            <div class="form-floating mb-3">
                <input type="text" class="form-control" name="cf-postal" value="  ' . ( isset( $_POST['cf-postal'] ) ? esc_attr( $_POST['cf-postal'] ) : '' ) . '" size="10" >
                <label for="floatingInput">Code postal</label>
            </div>
            <div class="form-floating mb-3">
                <input type="text" class="form-control"name="cf-city" value="' . ( isset( $_POST['cf-city'] ) ? esc_attr( $_POST['cf-city'] ) : '' ) . '" size="250" >
                <label for="floatingInput">Ville</label>
            </div>
            <div>
                <p class="fs-5 mt-4">Votre demande concerne&nbsp;:</p>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" name="cf-help" value="' . ( isset( $_POST['cf-help'] ) ? esc_attr( $_POST['cf-help'] ) : '' ) . '"/>
                    <label class="form-check-label" for="flexCheckDefault">
                        Les Aides de l\'État
                    </label>
                </div>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" name="cf-contract" value="' . ( isset( $_POST['cf-contract'] ) ? esc_attr( $_POST['cf-contract'] ) : '' ) . '">
                    <label class="form-check-label" for="flexCheckChecked">
                        Nos Contrats d\'Entretien
                    </label>
                </div>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" name="cf-quote" value="' . ( isset( $_POST['cf-quote'] ) ? esc_attr( $_POST['cf-quote'] ) : '' ) . '"/>
                    <label class="form-check-label" for="flexCheckChecked">
                        Une Demande de Devis
                    </label>
                </div>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" name="cf-other" value="' . ( isset( $_POST['cf-other'] ) ? esc_attr( $_POST['cf-other'] ) : '' ) . '"/>
                    <label class="form-check-label mb-4" for="flexCheckChecked">
                        Autre
                    </label>
                </div>
            </div>
            <div class="form-floating mb-3">
                <textarea class="form-control" name="cf-message"></textarea>
                <label for="floatingInput">Votre message</label>
            </div>
            <button type="submit" class="btn button-primary mt-3" name="cf-submitted">Envoyer</button>
        </form>
    </section>' );

    // if the submit button is clicked, send the email
    if ( isset( $_POST['cf-submitted'] ) ) {

        // sanitize form values
        $name      = sanitize_text_field( $_POST['cf-name'] );
        $firstname = sanitize_text_field( $_POST['cf-firstname'] );
        $email     = sanitize_email( $_POST['cf-email'] );
        $tel       = sanitize_text_field( $_POST['cf-tel'] );
        $address   = sanitize_text_field( $_POST['cf-address'] );
        $postal    = sanitize_text_field( $_POST['cf-postal'] );
        $city      = sanitize_text_field( $_POST['cf-city'] );
        $message   = sanitize_textarea_field( $_POST['cf-message'] );

        // get the blog administrator's email address
        $to = get_option( 'admin_email' );
        // Include Subject.
        $subject = 'Your Subject';
        // Headers is an array. You need to push to it.
        $headers[] = "From: $name <$email>" . "\r\n";
        // If email has been process for sending, display a success message
        if ( wp_mail( $to, $subject, $message, $headers ) ) {
            echo '<div>';
            echo '<p>Merci de votre envoi, nous vous recontacterons très vite !</p>';
            echo '</div>';
        } else {
            echo 'Echec lors de la validation du formulaire';
        }
    }
    return ob_get_clean();
}

add_shortcode( 'sitepoint_contact_form', 'cf_shortcode' );

我对此进行了测试,它有效...但是,您没有在电子邮件正文中包含任何表单字段。