Как с помощью вордпресса отправить данные с моей формы на почту?

в плагинах я как понял нельзя использовать свою вёрстку, а предлагают создать новую форму.


Ответы (1 шт):

Автор решения: Darth KYL

пример реализации кастомной формы с отправкой через ajax. Само собой функционал для примера и не для того чтоб его использовать на сайте нужно доработать валидацию, но в данном случае вопрос не о защите.

html часть

<form id="custom-form">
    <?php wp_nonce_field('name_of_action','name_of_field'); ?>
    <input type="submit" value="send">
</form>

php часть. подробнее о функции wp_mail() можно прочитать по этой ссылке wp_mail()

add_action('wp_ajax_custom_form_send', 'send_form_data');
add_action('wp_ajax_nopriv_custom_form_send', 'send_form_data');

function send_form_data(){
    if ( ! isset($_POST['name_of_field']) || ! wp_verify_nonce( $_POST['name_of_field'], 'name_of_action') ){
        wp_send_json_error();
    }

    $to = '[email protected]';
    $subject = 'Tема письма';
    $body = 'Данные из формы или любой другой контент';
    $headers = ['Content-Type: text/html; charset=UTF-8'];

    if ( wp_mail( $to, $subject, $body, $headers ) ) {
        wp_send_json_success();
    } else {
        wp_send_json_error();
    }
}

js часть

jQuery( function( $ ) {

    let sendForm = {
        init(){
            this.events();
        },
        events(){
            $('form#custom-form').on('submit', this.sendForm.bind( this ) );
        },
        sendForm( e ){
            e.preventDefault();

            $.ajax( {
                url: '/wp-admin/admin-ajax.php',  // url лучше брать из json
                method: 'POST',
                data: {
                    action: 'custom_form_send',
                    nonce: $( e.target ).find('[name="name_of_field"]').val(),
                }
            } ).success( function( response ) {
                if ( response.success ) {
                    console.log('success');
                } else {
                    console.log('error');
                }
            } );
        }
    };

    sendForm.init();

} );
→ Ссылка