0

我在 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{



        }
    }   
4

2 回答 2

3

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

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

在检查时if(wp_verify_nonce( $_POST[ 'put_name' ], 'your_action' )) 试试这个

于 2015-10-19T06:42:47.673 回答
1

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

于 2016-01-11T17:20:48.667 回答