0

PHPmail()ループが実行され、正しく送信され、エラーは発生しません。ただし、フロントエンドで成功またはエラーメッセージを通知するために、私のjQueryは機能していません。

PHP:

add_action( 'wp_ajax_invfr_process_ajax', 'invfr_sendmail');
add_action( 'wp_ajax_nopriv_invfr_process_ajax', 'invfr_sendmail');
function invfr_sendmail() {
    $post = ( !empty( $_POST ) ) ? true : false;

    if( $post ) {
        $subject = invfr_get_settings( 'subject' );
        $message = invfr_get_settings( 'message' );
        $friends = $_POST['friend_email'];
        $errors = array();
        foreach ( $friends as $key => $friend ) {
            $name = stripslashes( $_POST['friend_name'][$key] );
            $email = trim( $_POST['friend_email'][$key] );

            // Check name
            if( !$name )
                $errors[] = '#friend_name-' . $key;

            if( !$email )
                $errors[] = '#friend_email-' . $key;

            if( $email && !is_email( $email ) )
                $errors[] = '#friend_email-' . $key;
        }

        // send email 
        if( !$errors ) {
            foreach ( $friends as $key => $friend )
                $mail = wp_mail( $email, invfr_tokens_replacement( $subject, $_POST, $key ), invfr_tokens_replacement( $message, $_POST, $key ) );
            if( $mail )
                echo 'sent';
        }
        else
            echo json_encode( $errors );
    }
}

jQuery:

<script type="text/javascript"> 
            var jQuery = jQuery.noConflict();
            jQuery(window).load(function(){ 
                jQuery('#invfr_form').submit(function() {
                    // change visual indicators
                    jQuery('td').removeClass('error');
                    jQuery('.loading').show();
                    jQuery('.submit input').attr('disabled', 'disabled');
                    // validate and process form here
                    var str = jQuery(this).serialize();                  
                       jQuery.ajax({
                           type: 'POST',
                           url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
                           data: str,
                           success: function(msg) { 
                                jQuery('#invfr_note').ajaxComplete(function(event, request, settings) {
                                    msg = msg.replace(/(\s+)?.$/, "");  
                                    if( msg == 'sent' ) {
                                        result = '<div class="updated"><p><?php _e( 'Your invitation has been sent! Send another?', 'invfr' ); ?></p></div>';
                                        jQuery('#invfr_form input[type=text], #invfr_form input[type=email]').val('');
                                    } else {
                                        //loop through the error items to indicate which fields have errors
                                        msg = msg.replace(/[\[\]']+/g,'');
                                        msg = msg.split(',');
                                        jQuery.each( msg, function ( i, id ) {
                                            id = id.replace(/["']{1}/g, '');
                                            jQuery(id).parent('td').addClass('error');
                                        });
                                        result = '<div class="error"><p><?php _e( '<strong>ERROR:</strong> Check your form for the errors which are highlighted below.', 'invfr' ); ?></p></div>';
                                        //result = msg;
                                        msg = '';
                                    }
                                    jQuery(this).html(result);
                                    // visual indicators
                                    jQuery('.loading').hide();
                                    jQuery('.submit input').removeAttr('disabled');                      
                                });                  
                            }                    
                        });                  
                    return false;
                });         
            });
        </script>

助けてくれてありがとう!

4

1 に答える 1