我在Wordpress中有一个电子邮件表单,我使用ajax来处理它。
我在发送电子邮件之前在表单中创建一个nonce并进行检查。
nonce失败但输出显示它是同一个nonce。
模拟代码:
电子邮件表格
<form class="email-form" role="form">
<div class="form-group">
<label>Full Name</label>
<input type="text" class="email-name input-lg"/>
</div>
<div class="form-group">
<label>Email</label>
<input type="text" class="email-email input-lg"/>
</div>
<input type="hidden" name="ajax-nonce" id="ajax-nonce" value="' <?php echo wp_create_nonce( 'email-nonce' ); ?>'" />
<div class="form-group email-submit">
<button class="btn-green email-submit">Send</button>
</div>
</form>
js
$('.email-submit').on('click', function(e){
e.preventDefault();
var mc_name = $('.email-name').val();
var mc_email = $('.email-email').val();
var mc_nonce = $('#ajax-nonce').val();
alert(mc_nonce);
classData = {
'type' : 'post',
'action' : 'classajax-submit',
'dataType' : 'jsonp',
'crossDomain' : true,
'nonce' : mc_nonce,
'the_name' : mc_name,
'the_email' : mc_email,
}
$.post(TheAjax.ajaxurl, classData).done(function(result){
if(result == 'success') {
//success message
}
}, 'jsonp');
})
的functions.php
add_action( 'wp_enqueue_scripts', 'add_my_script' );
function add_my_script() {
wp_enqueue_script('scripts',get_template_directory_uri() . '/js/compiled/main.min.js', array('jquery'));
//
wp_localize_script( 'scripts', 'TheAjax', array(
'ajaxurl' => admin_url( 'admin-ajax.php' )
));
}
add_action( 'wp_ajax_nopriv_classajax-submit', 'classajax_submit' );
add_action( 'wp_ajax_classajax-submit', 'classajax_submit' );
function classajax_submit() {
$nonce = stripslashes($_POST['nonce']);
echo 'nonce in php ' . $nonce;
if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) {
die ('Email Busted!');
}else{
}
}
答案 0 :(得分:3)
首先你不需要创建隐藏字段使用它会自动创建它
<?php wp_nonce_field( 'your_action', 'put_name' ); ?>
检查if(wp_verify_nonce( $_POST[ 'put_name' ], 'your_action' ))
时试试这个
答案 1 :(得分:1)
您可以使用 check_ajax_referrer ,文档中有一个示例:https://codex.wordpress.org/Function_Reference/check_ajax_referer