0

サブスクライバーフォームを作成したいのですが、このコードをこのjavascriptで使用しました

<?php
require_once(ABSPATH . WPINC . '/registration.php');
global $wpdb, $user_ID;

        if($_POST){
            //We shall SQL escape all inputs
            $username = $wpdb->escape($_POST['username']);
            if(empty($username)) { 
                echo "*Please enter username.";
                exit();
            }
            $email = $wpdb->escape($_POST['email']);
            if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/", $email)) { 
                echo "*Please enter a valid email.";
                exit();
            }       

                $random_password = wp_generate_password( 12, false );
                $status = wp_create_user( $username, $random_password, $email );
                if ( is_wp_error($status) ) 
                    echo "Username or email already exists. Please try another one.";
                else {
                    $from = get_option('admin_email');
                    $headers = 'From: '.$from . "\r\n";
                    $subject = "Registration successful";
                    $msg = "Registration successful.\nYour login details\nUsername: $username\nPassword: $random_password";
                    wp_mail( $email, $subject, $msg, $headers );

                    echo "Please check your email for login details.";
                }

            exit();

        } else { 

            ?>

            <?php                   
            if(get_option('users_can_register')) { //Check whether user registration is enabled by the administrator
            ?>

            <div style="width:250px;height:auto;margin-top:5px;margin-bottom:15px;background-color:#043D90; padding-top:5px;padding-bottom:5px;
            border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px; color:#fff;float:left;">          
            <h3 style="margin-left:20px;margin-bottom:15px;margin-top:10px;font-weight:bold;">Sign up now for the Newsletter</h3>
            <table>
            <form id="wp_signup_form" action="" method="post" >
            <tr>
            <td><label style="margin-left:10px;">Name:</label></td>
            <td><input style="width:180px; height:25px; margin-bottom:5px; background-color:#efefef;border:none;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;" type="text" name="username" class="text" value="" /><br />
            </td></tr>
            <tr>
            <td><label style="margin-left:10px;">Email:</label></td>
            <td><input style="width:180px; height:25px; margin-bottom:5px; background-color:#efefef;border:none;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"type="text" name="email" class="text" value="" /> <br />
            </td></tr></table>
            <div id="result" style="margin-left:10px; color:#111111;font-weight:bold;"></div> <!-- To hold validation results -->
            <div><input style="margin-right:20px;margin-top:10px;padding:5px; float:right;" type="submit" id="submitbtn" name="submit" value="Sign Up" /></div>
            </form>
            </div>
            <?php 
                }
            else echo "Registration is currently disabled. Please try again later.";
            ?>
            <?php

        } //end of if($_post)
            ?>

名前や電子メールを入力しなかった場合、サインアップボタンの上にテキストが表示されるという問題がありますが、問題はヘッダーも取得され、ページ上の残りのページになる可能性があることです! 関数(msg)のjavascriptに問題があることがわかりましたが、解決できませんでした。誰でも私を助けることができます。

<script type="text/javascript">                         
            $("#submitbtn").click(function() {

            $('#result').html('<img src="<?php bloginfo('template_url'); ?>/images/ajax-loader.gif" class="loader" />').fadeIn();
            var input_data = $('#wp_signup_form').serialize();
            $.ajax({
            type: "POST",
            url:  "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",
            data: input_data,
            success: function(msg){
            $('.loader').remove();
            $('<div>').html(msg).appendTo('div#result').hide().fadeIn('slow');
            }
            });
            return false;

            });
            </script>
4

1 に答える 1

0

続行する前に、WordPress 3.1 では wp-includes/registration.php が廃止されたことに注意してください。

検証について: 簡単な方法は、送信前に jQuery フォームの検証を行うことです。そのようなことを行うためのjQueryプラグインがあります。参照: http://docs.jquery.com/Plugins/Validation

「ページの残りの部分も読み込まれている」ことを確認する必要があります。コードから、各検証のエラーメッセージ以外は何も表示されません。したがって、msgそれを持ってくる必要がありますが、他には何もありません。ただし、 exit がスクリプトの実行を停止するだけで、 die も javascript にエラーを送信するdie();代わりに、おそらくそれを閉じる必要があります。exit();

編集:#1

<script type="text/javascript">                         
$("#submitbtn").click(function() {
    $('#result').html('<img src="<?php bloginfo('template_url'); ?>/images/ajax-loader.gif" class="loader" />').fadeIn();
    var input_data = $('#wp_signup_form').serialize();
    $.ajax({
        type: "POST",
        url:  "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",
        data: input_data,
        success: function(msg){
            var textMsg = $(msg).find('#msg').html(); // Replace #msg with the element which you add the message
            $('.loader').remove();
            $('<div>').html(textMsg).appendTo('div#result').hide().fadeIn('slow');
        }
    });
    return false;
});
</script>
于 2012-06-15T01:42:55.427 に答える