2

私はScreets Wordpress Sessionsプラグインを使用していますが、とてもうまく機能します。私が抱えている問題はこれです。サイトのユーザーを別のテーブルなどを介してワードプレスから管理しようとしています。スパムを停止するために確認メールを送信する場合、サインアップフォームが機能しています。私が抱えている問題は、私の単純なフォームです:

 mysql_connect("localhost", "%username%", "%password%") or die(mysql_error()); // Connect to database server(localhost) with username and password.
    mysql_select_db("%database%") or die(mysql_error()); // Select registration database.
    if(isset($_POST['name']) && !empty($_POST['name']) AND isset($_POST['password']) && !empty($_POST['password']) AND isset($_POST['name']) && !empty($_POST['name'])){
                $username = mysql_escape_string($_POST['name']);
                $password = mysql_escape_string(md5($_POST['password']));

                $search = mysql_query("SELECT username, password, active FROM %table% WHERE username='".$username."' AND password='".$password."' AND active='1'") or die(mysql_error()); 
                $match  = mysql_num_rows($search);

                if($match = 1){
                    $msg = 'Login Complete! Thanks';
                    //$email = $row['EmailAddress'];  
                    //;  
                    //$_SESSION['EmailAddress'] = $email;  
                    //$_SESSION['LoggedIn'] = 1; 
                    $session->set_userdata( 'username', $username);
                    header ("Location: /"); 
                }else{
                    $msg = 'Login Failed!<br /> Please make sure that you enter the correct details and that you have activated your account.';
                }
            }


        ?>
        <!-- stop PHP Code -->

        <!-- title and description -->  
        <h2>Login Form</h2>
        <p>Please enter your name and password to login</p>

        <?php 
            if(isset($msg)){ // Check if $msg is not empty
                echo '<div class="statusmsg">'.$msg.'</div>'; // Display our message and add a div around it with the class statusmsg
            } ?>

        <!-- start sign up form --> 
        <form action="" method="post">
            <label for="name">Username:</label>
            <input type="text" name="name" value="" />
            <label for="password">Password:</label>
            <input type="password" name="password" value="" />

            <input type="submit" class="submit_button" value="login" />
        </form>

私のワードプレスログインに自動リダイレクトされますが、これは私が望んでいるものではありません。以前に wp_users を使用するように言われたことがありますが、実際には wp_users やプラグインを使用したくありません。必要な方法で動作させるためのアイデアはありますか?

編集: 質問をより明確にするために、送信をクリックした人は誰でも wp-login.php にリダイレクトされます。ページは、SQL接続に従ってもセッションを確認して実際に作成していません。何か案は?

4

2 に答える 2

1

より良い方法は、Ajaxを使用してデータを送信および保存することです。まず、以下のコードを に含めますfunctions.php

/**
* User Log in
*/
function sc_login( $params ){   
    global $wpdb;

    // You can check user here
    $sql = $wpdb->prepare( 
        '
            SELECT COUNT(*) FROM ' . $wpdb->prefix . ' users
            WHERE `email`  = %d
            AND `password` = %s
        ',
            $params['user_login'], $params['user_password']
    );
    $auth = $wpdb->get_var( $sql );

    if( $auth ) {
        // Log in system
    } else {
        // Username or password is wrong
    }
}
/**
* Ajax Submit
*/
function sc_ajax_callback() {

    // run function
    $response = call_user_func($_POST['func'], $_POST);

    // response output
    header( "Content-Type: application/json" );
    echo json_encode($response);
    exit;
}

// Ajax Requests
add_action( 'wp_ajax_nopriv_sc_ajax_callback', 'sc_ajax_callback' );
add_action( 'wp_ajax_sc_ajax_callback', 'sc_ajax_callback' );

テーマにファイルを作成し、Ajax.js次のコードを追加します。

(function ( $ ) { 
    jQuery(document).ready(function() {
        /**
        * Log in
        */
        $('#sc_login_form').submit(function() {

            jQuery.ajax({
                type: 'POST',
                url: sc_ajax.ajaxurl,
                data: $('#sc_login_form').serialize(),
                dataType: 'json',
                success: function(response, textStatus) {

                    // Show errors?
                    if( response.errors ){
                       // YOU CAN SHOW ERRORS HERE IF YOU WANT
                       // for instance, "Email is required!"

                    // successful log in
                    } else {
                       // refresh page (HERE IS THE POINT)
                       window.location.href = sc_ajax.REDIRECT_URL;
                   }

                    console.log(response);

                }
             });

            return false;

       });

   }); 
}( jQuery ));

次に、Ajax スクリプトをローカライズする必要があります。header.php関数の前にこれらのコードを開いて追加しwp_head();ます。以下の REDIRECT_URL 変数を変更することを忘れないでください

// insert jquery
wp_enqueue_script( 'jquery' );

// ajax requests
wp_enqueue_script( 'sc-ajax-request', get_template_directory_uri() . '/Ajax.js', array( 'jquery' ) );

// prepare your ajax custom vars
$ajax_vars = array(
    'REDIRECT_URL'  => '', // (!) CHANGE THIS WITH URL WHERE YOU WANT TO GO
    'ajaxurl'   => admin_url( 'admin-ajax.php' )
);

wp_localize_script( 'sc-ajax-request', 'sc_ajax', $ajax_vars );

最後のステップは、次のようにフォームを編集することです。

<form id="sc_login_form">
    <input type="hidden" name="action" value="sc_ajax_callback" />
    <input type="hidden" name="func" value="sc_login" />

    Email:
    <input type="text" name="user_login" />

    Password:
    <input type="password" name="user_password"/>

    <input type="submit" value="Log in" />
</form>

これが役立つことを願っています。

于 2012-11-16T22:20:02.797 に答える
0

そうそう。WordPress の Rewrite API があなたを襲っています。フォームを送信すると、スクリプトはそれ自体にポスト バックしようとします。WordPress は http://your-site.com/login を取り、それをhttp://your-site.com/wp-login.phpに書き換え ます。

これを修正する方法は次のとおりです。

WordPress でページを作成し、loginという名前を付けてから、この次のステップで作成するカスタム ページ テンプレートをそれに割り当てます。

ここで、カスタム ページ テンプレートを作成し、現在アクティブなテーマ フォルダーに配置して、次のコードを配置する必要があります。

<?php

/*
 * Template Name: Login
 */

// Put the code for your login here.

?>

最後に、次の行をテーマのfunctions.phpに追加します。

add_rewrite_rule( '^login/?$', 'index.php?page_name=$matches[1]', 'top' );

それはうまくいくはずです。:)

于 2012-11-16T06:40:06.483 に答える