#php #ajax #wordpress #forms
#php #ajax #wordpress #формы
Вопрос:
У меня есть страница, созданная на WordPress с отредактированной мной пользовательской темой. Я пытался создать свою собственную форму, используя ajax без какого-либо плагина. Проблема в том, что у меня нет никаких ошибок и т. Д., А форма по-прежнему ничего не делает (просто перезагружает страницу). Я сделал все, как на странице учебника, и до сих пор не знаю, что делать. Я понял, что php-код не выполняется. Как вы можете видеть, есть входные условия, которые не выполняются :/
Это то, что я сделал до сих пор:
HTML:
<section id="contact_content">
<form name="contact_me" action="" method="post">
<?php if( get_field('contact_header') ): ?>
<div id="contact_header"><?php the_field('contact_header'); ?></div>
<?php endif; ?>
<input type="text" name="form_name" placeholder="<?php the_field('contact_name'); ?>" id="contact_name"> <br />
<input type="number" name="form_phone_number" placeholder="<?php the_field('contact_phone'); ?>" id="contact_phone"> <br />
<input type="email" name="form_email" placeholder="<?php the_field('contact_mail'); ?>" id="contact_mail"> <br />
<input type="text" name="form_comment" placeholder="<?php the_field('contact_message'); ?>" id="contact_message" style="height: 190px;"><br />
<input type="hidden" name="action" value="send_form" style="display: none; visibility: hidden; opacity: 0;">
<button type="submit" id="contact_button">wyślij</button>
</form>
</section>
function.php
function javascript_variables(){ ?>
<script type="text/javascript">
let ajax_url = '<?php echo admin_url( "admin-ajax.php" ); ?>';
let ajax_nonce = '<?php echo wp_create_nonce( "secure_nonce_name" ); ?>';
//form AJAX validation
$( 'form[name="contact_me"]' ).on( 'submit', function() {
let form_data = $( this ).serializeArray();
form_data.push( { "name" : "security", "value" : ajax_nonce } );
$.ajax({
url : ajax_url,
type : 'post',
data : form_data,
success : function( response ) {
console.log( response );
},
fail : function( err ) {
console.log( "Błąd: " err );
}
});
return false;
});
</script><?php
}
add_action ( 'wp_head', 'javascript_variables' );
add_action('wp_ajax_send_form', 'send_form');
add_action('wp_ajax_nopriv_send_form', 'send_form');
function send_form(){
check_ajax_referer( 'secure-nonce-name', 'security' );
if ( empty( $_POST["form_name"] ) ) {
echo "Wprowadź imię i nazwisko.";
wp_die();
}
if ( ! filter_var( $_POST["form_email"], FILTER_VALIDATE_EMAIL ) ) {
echo "Wprowadź poprawny adres e-mail.";
wp_die();
}
if ( empty( $_POST["form_comment"] ) ) {
echo "Wprowadź wiadomość.";
wp_die();
}
if ( empty($_POST["form_phone_number"] ) ) {
echo 'Wprowadź numer telefonu';
wp_die();
}
$to = 'dawidt9882@gmail.com';
$subject = 'Now message from a client!';
$body = 'From: ' . $_POST['form_name'] . 'n';
$body .= 'Number: ' . $_POST['form_phone_number'] . 'n';
$body .= 'Email: ' . $_POST['form_email'] . 'n';
$body .= 'Message: ' . $_POST['form_comment'] . 'n';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
echo 'Wiadomość została wysłana! ;p';
wp_die();
}
Есть идеи? : c
Ответ №1:
Попробуйте это:
$( 'form[name="contact_me"]' ).on( 'submit', function(ev) {
ev.preventDefault();
let form_data = $( this ).serializeArray();
form_data.push( { "name" : "security", "value" : ajax_nonce, "action" : "send_form" } );
$.ajax({
url : ajax_url,
type : 'post',
data : form_data,
success : function( response ) {
console.log( response );
},
fail : function( err ) {
console.log( "Błąd: " err );
}
});
return false;
});
Комментарии:
1. также добавьте действие здесь —
form_data.push( { "name" : "security", "value" : ajax_nonce, "action" : "send_form" } );
2. я был уверен, что это так :/ Я искал что-нибудь, чтобы вставить функцию php, но она все еще не работает; c
3. измените submit на click и используйте preventdefault
4. Изменено, как вы сказали, без результата :/ Я вставил код выше.
5. вы должны добавить onclick на кнопку, а не на форму
Ответ №2:
Итак, теперь js выглядит так:
let ajax_url = '<?php echo admin_url( "admin-ajax.php" ); ?>';
let ajax_nonce = '<?php echo wp_create_nonce( "secure_nonce_name" ); ?>';
//form AJAX validation
$( '#contact_button' ).on( 'click', function(ev) {
ev.preventDefault();
let form_data = $( this ).serializeArray();
form_data.push( { "name" : "security", "value" : ajax_nonce, "action" : "send_form" } );
$.ajax({
url : ajax_url,
type : 'post',
data : form_data,
success : function( response ) {
console.log( response );
},
fail : function( err ) {
console.log( "Błąd: " err );
}
});
return false;
});
</script><?php
И он по-прежнему ничего не делает. :/ Если я допустил ошибку, пожалуйста, отговорите меня от любого понятия.