Wordpress ajax 表单随机数失败

问题描述 投票:0回答:3

我在 WordPress 中有一个电子邮件表单,我正在使用 ajax 来处理它。

我正在表单中创建一个随机数,并在发送电子邮件之前检查它。

随机数失败,但输出显示它是相同的随机数。

简化代码:

电子邮件表格

    <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');
    })

函数.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{



        }
    }   
ajax wordpress nonce
3个回答
3
投票

首先,您不需要创建隐藏字段,使用它它会自动创建

<?php wp_nonce_field( 'your_action', 'put_name' ); ?>

检查时

if(wp_verify_nonce( $_POST[ 'put_name' ], 'your_action' ))
试试这个


1
投票

您可以使用 check_ajax_referrer,文档中有一个示例:https://codex.wordpress.org/Function_Reference/check_ajax_referer


0
投票

你只是在这里做错了一点。更新后的随机数字段如下:

<input type="hidden" name="ajax-nonce" id="ajax-nonce" value="<?php echo wp_create_nonce( 'email-nonce' ); ?>" />
© www.soinside.com 2019 - 2024. All rights reserved.