我使用的是Screets Wordpress Sessions插件,效果非常好。我遇到的问题是,我将通过不同的表等管理我的网站用户wordpress。我有我的注册表单工作,它是否发送确认电子邮件以阻止垃圾邮件。我遇到的问题是我的简单形式:
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>
自动重定向到我的wordpress登录,这不是我想要的。我之前被告知使用wp_users但我真的不想使用它或插件。有什么想法让它按照我需要的方式工作吗?
编辑:为了更好地澄清问题,任何点击提交的人都会被重定向到wp-login.php。该页面甚至没有跟随我的SQL连接检查并实际创建会话。有什么想法吗?
答案 0 :(得分: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>
我希望这会有所帮助。
答案 1 :(得分:0)
啊,是的。 WordPress的Rewrite API正在踩到你。提交表单时,脚本会尝试回发给自己。 WordPress需要 http://your-site.com/login 并重写 它 http://your-site.com/wp-login.php 。
以下是修复方法。
在WordPress中创建一个页面,将其命名为登录,然后将custom page template分配给您将在下一步中创建的页面。
现在您需要创建custom page template,将其放在当前有效的主题文件夹中,并将以下代码放入其中:
<?php
/*
* Template Name: Login
*/
// Put the code for your login here.
?>
最后,将下一行添加到主题的 functions.php:
add_rewrite_rule( '^login/?$', 'index.php?page_name=$matches[1]', 'top' );
那应该很好地完成这个伎俩。 :)