رفتن به مطلب

پست های پیشنهاد شده

مشکل پابرجاست . الان یه نکته ای به ذهنم رسید . شاید اگه بشه action رو در فرم تغییر بدی تا حدودی مشکلات حل بشه . چون action اون روی wp-login.php قرار داره . که این باعث میشه اول بره تو داشبورد بعد ریدایرکت بشه تو خود صفحه لوگین . اگه این اکشن تغییر کنه شاید بشه یه کارایی کرد

لینک به ارسال

لطفا قوانین را بخوانید

بحث درباره محصولات تجاری ممنوع است

میتوانید referer را به عنوان آدرس بازگشت ارسال کنید به صفحه لاگین

مثلا


<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_REFERER"] ?>" />

لینک به ارسال

لطفا قوانین را بخوانید

بحث درباره محصولات تجاری ممنوع است

میتوانید referer را به عنوان آدرس بازگشت ارسال کنید به صفحه لاگین

مثلا


<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_REFERER"] ?>" />

این یک خط کد کوتاه واقعا دوای درد من بود . اما یه مشکل دیگه ؟! وقتی پسورد اشتباه داده میشه ارجاع داده میشه به wp-login ÷یشفرض وردپرس و من نمیخوام این ارجاع صورت بگیره . و اینکه من روی wp-admin پسورد میزارم پس این ارجاع بیهوده است . چطور میتونم جلوی این ارجاع رو بگیرم و این که تو همون صفحه بمونه و پیغام پسورد اشتباه بده

لینک به ارسال

الان که داشتم صفحه رو طراحی میکردم فهمیدم وقتی روی رمز عبور خود را فراموش کرده اید کلیک میکنم میره به صفحه ی wp-login.php . و من میخوام این قسمت رو هم خودم طراحی کنم تا به صفحه ای که من میخوام بره نه wp-login

لینک به ارسال

در گام بعدی برای این صفحه ورود میخوام امکان ریست پسورد رو اضافه کنم . کامل مستقل از صفحه wp-login و همچنین کاری کنم موقعه ای که پسوردر اشتباه زده به صفحه wp-login نره و تو همون صفحه بمونه و بگه رمز یا پسورد اشتباهه

لینک به ارسال

یعنی واقعا کسی نمیتونه کمک کنه که چطور ؟

صفحه فراموشی رمز عبور بسازم و برای این صفحه ، صفحه ریست پسورد بسازم که کلا نسبت به wp-login مجزا بشه ؟ افزونه میخوام . کدهاش رو میخوام

بعد از اینکارا کاری کنم وقتی رمز عبور رو اشتباه وارد میکنه کاربر به صفحه wp-login نره و تو همین صفحه لاگین خودم پیغام بده

لینک به ارسال

از کد های زیر بعنوان یک قالب برگه (page temeplate) استفاده کنید :


<div class="wrapper">
<?php
global $wpdb;
$error = '';
$success = '';
// check if we're in reset form
if( isset( $_POST['action'] ) && 'reset' == $_POST['action'] )
{
$email = trim($_POST['user_login']);
if( empty( $email ) ) {
$error = 'Enter a username or e-mail address..';
} else if( ! is_email( $email )) {
$error = 'Invalid username or e-mail address.';
} else if( ! email_exists( $email ) ) {
$error = 'There is no user registered with that email address.';
} else {
$random_password = wp_generate_password( 12, false );
$user = get_user_by( 'email', $email );
$update_user = wp_update_user( array (
'ID' => $user->ID,
'user_pass' => $random_password
)
);
// if update user return true then lets send user an email containing the new password
if( $update_user ) {
$to = $email;
$subject = 'Your new password';
$sender = get_option('name');
$message = 'Your new password is: '.$random_password;
$headers[] = 'MIME-Version: 1.0' . "\r\n";
$headers[] = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers[] = "X-Mailer: PHP \r\n";
$headers[] = 'From: '.$sender.' < '.$email.'>' . "\r\n";
$mail = wp_mail( $to, $subject, $message, $headers );
if( $mail )
$success = 'Check your email address for you new password.';
} else {
$error = 'Oops something went wrong updaing your account.';
}
}
if( ! empty( $error ) )
echo '<div class="message"><p class="error"><strong>ERROR:</strong> '. $error .'</p></div>';
if( ! empty( $success ) )
echo '<div class="error_login"><p class="success">'. $success .'</p></div>';
}
?>

<!--html code-->
<form method="post">
<fieldset>
<p>Please enter your username or email address. You will receive a link to create a new password via email.</p>
<p><label for="user_login">Username or E-mail:</label>
<?php $user_login = isset( $_POST['user_login'] ) ? $_POST['user_login'] : ''; ?>
<input type="text" name="user_login" id="user_login" value="<?php echo $user_login; ?>" /></p>
<p>
<input type="hidden" name="action" value="reset" />
<input type="submit" value="Get New Password" class="button" id="submit" />
</p>
</fieldset>
</form>
</div>

لینک به ارسال

مطمئنا با کلیک بر روی دکمه تشکر نمیشود به خاطر اینکار از شما قدردانی کرد اما واقعا کمک بسیار بزرگی را انجام دادید.

و اما سوال دیگری که دارم ؟! چطور میشه وقتی که کاربر پسورد اشتباه زد به صفحه ی wp-login ریدایرکت نشود و تو همون صفحه لاگین که ساختم بماند؟

لینک به ارسال

باید یه صفحه لاگین جدید ایجاد کنید ، مثل کد قبلی که بهتون دادم کد زیر را در قالب برگه پیاده کنید :


<div class="wrapper">
<?php
global $wpdb;

$err = '';
$success = '';

if(isset($_POST['task']) && $_POST['task'] == 'login' )
{
//We shall SQL escape all inputs to avoid sql injection.
$username = $wpdb->escape($_POST['log']);
$password = $wpdb->escape($_POST['pwd']);
$remember = $wpdb->escape($_POST['remember']);


if( $username == "" || $password == "" ) {
$err = 'Please don\'t leave the required field.';
} else {
$user_data = array();
$user_data['user_login'] = $username;
$user_data['user_password'] = $password;
$user_data['remember'] = $remember;
$user = wp_signon( $user_data, false );

if ( is_wp_error($user) ) {
$err = $user->get_error_message();
exit();
} else {
wp_set_current_user( $user->ID, $username );
do_action('set_current_user');

echo '<script type="text/javascript">window.location='. get_bloginfo('url') .'</script>';
exit();
}
}
}
?>
<form method="post">
<h2>Already have an account? Please login.</h2>
<p>
<?php
if( !empty($sucess) )
echo $sucess;

if( !empty($err) )
echo $err;
?>
</p>
<p><label for="log">Email</label>
<input type="text" name="log" id="log" value="" /></p>
<p><label for="pwd">Password</label>
<input type="password" name="pwd" id="pwd" value="" /></p>
<p><input type="submit" value="Login" class="button" /></p>

<label><input type="checkbox" name="remember" value="true" /> Remember Me</label>
<input type="hidden" name="task" value="login" />
</form>
</div>

لینک به ارسال

از کد های زیر بعنوان یک قالب برگه (page temeplate) استفاده کنید :


<div class="wrapper">
<?php
global $wpdb;
$error = '';
$success = '';
// check if we're in reset form
if( isset( $_POST['action'] ) && 'reset' == $_POST['action'] )
{
$email = trim($_POST['user_login']);
if( empty( $email ) ) {
$error = 'Enter a username or e-mail address..';
} else if( ! is_email( $email )) {
$error = 'Invalid username or e-mail address.';
} else if( ! email_exists( $email ) ) {
$error = 'There is no user registered with that email address.';
} else {
$random_password = wp_generate_password( 12, false );
$user = get_user_by( 'email', $email );
$update_user = wp_update_user( array (
'ID' => $user->ID,
'user_pass' => $random_password
)
);
// if update user return true then lets send user an email containing the new password
if( $update_user ) {
$to = $email;
$subject = 'Your new password';
$sender = get_option('name');
$message = 'Your new password is: '.$random_password;
$headers[] = 'MIME-Version: 1.0' . "\r\n";
$headers[] = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers[] = "X-Mailer: PHP \r\n";
$headers[] = 'From: '.$sender.' < '.$email.'>' . "\r\n";
$mail = wp_mail( $to, $subject, $message, $headers );
if( $mail )
$success = 'Check your email address for you new password.';
} else {
$error = 'Oops something went wrong updaing your account.';
}
}
if( ! empty( $error ) )
echo '<div class="message"><p class="error"><strong>ERROR:</strong> '. $error .'</p></div>';
if( ! empty( $success ) )
echo '<div class="error_login"><p class="success">'. $success .'</p></div>';
}
?>

<!--html code-->
<form method="post">
<fieldset>
<p>Please enter your username or email address. You will receive a link to create a new password via email.</p>
<p><label for="user_login">Username or E-mail:</label>
<?php $user_login = isset( $_POST['user_login'] ) ? $_POST['user_login'] : ''; ?>
<input type="text" name="user_login" id="user_login" value="<?php echo $user_login; ?>" /></p>
<p>
<input type="hidden" name="action" value="reset" />
<input type="submit" value="Get New Password" class="button" id="submit" />
</p>
</fieldset>
</form>
</div>

یه سوال دیگه این خط دور فرم از کجا اومده و چرا نمیره؟!

باید یه صفحه لاگین جدید ایجاد کنید ، مثل کد قبلی که بهتون دادم کد زیر را در قالب برگه پیاده کنید :

صفحه لاگین دارم ! اما میخوام کار کنم ریدایرکت به wp-login صورت نگیره وقتی پسورد اشتباه زده میشه . میوام تو همین صفحه پیغام اشتباه داده بشه

لینک به ارسال

بهتره از افزونه استفاده کنید


https://wordpress.org/plugins/nice-login-register-widget/screenshots/
https://wordpress.org/plugins/custom-login/screenshots/
https://wordpress.org/plugins/wp-custom-login/screenshots/

لینک به ارسال

بهتره از افزونه استفاده کنید


https://wordpress.org/plugins/nice-login-register-widget/screenshots/
https://wordpress.org/plugins/custom-login/screenshots/
https://wordpress.org/plugins/wp-custom-login/screenshots/

نه افزونه فکر خوبی نیست . این فرم کارش تمومه به لطف دوستان امکاناتی که میخوام بهش اضافه شده . اگر بخوام از افزونه استفاده کنم مجددا باید ظاهرش رو با ظاهر قالبم ست کنم که هم زمان بره و هم تو برخی از افزونه ها این کار سخته

لینک به ارسال

یه سوال دیگه این خط دور فرم از کجا اومده و چرا نمیره؟!

صفحه لاگین دارم ! اما میخوام کار کنم ریدایرکت به wp-login صورت نگیره وقتی پسورد اشتباه زده میشه . میوام تو همین صفحه پیغام اشتباه داده بشه

تگ <fieldset> را از داخل فرم پاک کنید ، اگه خط دور نرفت دیگه مربوط میشه به استایل قالبتون

برای مورد دوم باید مقدار خاصیت action را در فرم ورود برابر با صفحه لاگینی که ساختید بکنید (البته نام مقادیری که ارسال میشن با نام مقادیر فیلد های فرم ورود باید یکی باشه)

لینک به ارسال

تگ <fieldset> را از داخل فرم پاک کنید ، اگه خط دور نرفت دیگه مربوط میشه به استایل قالبتون

برای مورد دوم باید مقدار خاصیت action را در فرم ورود برابر با صفحه لاگینی که ساختید بکنید (البته نام مقادیری که ارسال میشن با نام مقادیر فیلد های فرم ورود باید یکی باشه)

یعنی action="login"

خوب با اینکار فکر کنم دیگه فرم ورود کار نکنه چون اکشنی براش تعریف شده . من فقط کد فرم ورود رو پیدا کردم و اون رو توی یک صفحه وارد کردم و فرم ساختم

لینک به ارسال

برای این مورد شما باید کدی که برای صفحه لاگین بهتون دادم استفاده کنید و هر فرم ورود دیگه ای که در سایتتون هست action برابر با صفحه لاگین بشه

لینک به ارسال

برای این مورد شما باید کدی که برای صفحه لاگین بهتون دادم استفاده کنید و هر فرم ورود دیگه ای که در سایتتون هست action برابر با صفحه لاگین بشه

اگه من اکشن فرم ورود خودمو بزارم login.php خوب این فرم کار نمیکنه اصلا

و راستی کدهای شما برای فرم ورود کار نکرد

لینک به ارسال

یعنی واقعا نمیشه شرطی را قرار داد که در صورتی که نام کاربری یا پسورد اشتباه بود تو همین صفحه بمونه و یک پیغام رو نشون بده؟

لینک به ارسال

کدی که بهتون دادم تست شده بود ،اما به طریق زیر هم میشه انجام داد

کد زیر را در قالب برگه بزارید :


<?php
if(isset($_GET['login']) && $_GET['login'] == 'failed')
{
?>
<div id="login-error" style="background-color: #FFEBE8;border:1px solid #C00;padding:5px;">
<p>Login failed: You have entered an incorrect Username or password, please try again.</p>
</div>
<?php
}
?>
<form name="loginform" id="loginform" action="<?php echo get_option('siteurl'); ?>/wp-login.php" method="post">

<p class="login-username">
<label for="user_login">شناسه</label>
<input type="text" name="log" id="user_login" class="input" value="" size="20" />
</p>
<p class="login-password">
<label for="user_pass">رمز</label>
<input type="password" name="pwd" id="user_pass" class="input" value="" size="20" />
</p>
<p class="login-remember"><label><input name="rememberme" type="checkbox" id="rememberme" value="forever" /> مرا به خاطر بسپار</label></p>
<p class="login-submit">
<input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="ورود" />
<input type="hidden" name="redirect_to" value="<?php echo get_option('siteurl'); ?>" />
</p>
</form>

و برای اینکه وقتی کاربر رمز و یوزر را اشتباه وارد میکند دوباره به همین صفحه لاگین شود کد زیر را به functions.php قالبتون اضاف کنید(در خط 2 و 9 بجای login آدرس صفحه لاگشنتون را وارد کنید):


function login_failed() {
$login_page = home_url( '/login/' );
wp_redirect( $login_page . '?login=failed' );
exit;
}
add_action( 'wp_login_failed', 'login_failed' );

function verify_username_password( $user, $username, $password ) {
$login_page = home_url( '/login/' );
if( $username == "" || $password == "" ) {
wp_redirect( $login_page . "?login=failed" );
exit;
}
}
add_filter( 'authenticate', 'verify_username_password', 1, 3);

البته این افزونه همه کار هایی که میخواهید بکنید را انجلم میده (در قالبتون) : https://wordpress.or.../theme-my-login

لینک به ارسال

دقیقا کاری که گفتین انجام دادم . اما ...

اصلا نمیتوانم وارد صفحه ی localhost/wordpress/wp-admin بشم هربار اقدام به اینکار میکنم با پیغام پسورد یا شناسه اشتباه مواجه میشم . یعنی وقتی میخوام از داخل صفحه wp-admin وارد سایت شم با این پیغام مواجه میشم و همچنین وقتی هم که وارد میشم با این پیغام مواجه میشم .

یجورایی انگار نمیزاره من از صفحه wp-admin استفاده کنم برای ورود و وقتی هم از خود صفحه لاگین که ساختم وارد میشم و در صورت درست بودن نام کرابری هم پیغام اشتباه رو نشون میده

لینک به ارسال

و البته مشکل دیگه اینه که وقتی نام کرابری یا رمز و اشتباه میزنی و بعد تصحیح میکنی و وارد میکنی تو همون صفحه لاگین میمونی

من با این یه تیکه کد کاری کرده بودم که کاربر مثل اگه توی صفحه اصلی یا ادامه مطلب روی دکمه لاگین بزنه و بخواد وارد سایت بشه بعد از وارد شدن برگرده به جایی که قبلا بوده حالا یا صفحه اصلی یا ادامه مطلب .


<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_REFERER"] ?>" />

اما خوب با کد شما وقتی که کاربر رمز و اشتباه و بزنه و تصحیح کنه و وارد شه تو همون صفحه میمونه و ریدیارکت صورت نمیگیره . بهنظر خیلی پیچیده شده و کار سختیه

و همچنین به مشکلات بالا بیافزایید :

شما کدی رو برای درخواست رمز عبور به من دادین تو صفحات قبل .

این کد 3 مشکل داره

1- وقتی کاربر شناسه وارد میکنه این کد ایراد میگیره و به نظر فقط با ایمیل کار میکنه .

2- برای کاربران یاهو پسورد ارسال نمیکنه این در صورتی ست که خود وردپرس در قسمت wp-login ایمیل را راسال میکند .

3- مشکل دیگه اینه که خود وردپرس لینک تصحیح رمز ارسال میکنه اما این کد پسورد رو ارسال میکنه .

ویرایش شده توسط mrasoul
لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...