लॉगिन के बाद उपयोगकर्ता को मूल यूआरएल पर पुनर्निर्देशित करें?


16

मेरे पास एक फ़ंक्शन है जो उपयोगकर्ताओं को लॉगिन पृष्ठ (होम) पर पुनर्निर्देशित करता है यदि वे किसी अन्य पृष्ठ को लॉग इन किए बिना उपयोग करने की कोशिश कर रहे हैं, तो यहां बताया गया है कि यह कैसे काम करता है:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

वास्तव में सरल और ठीक काम करता है, समस्या यह है कि मुझे उन्हें उस यूआरएल पर पुनर्निर्देशित करने की आवश्यकता है जो वे सफलतापूर्वक लॉगिन करने के बाद जाने की कोशिश कर रहे थे, ठीक उसी तरह जैसे कि वर्डप्रेस बैकएंड काम करता है।

क्या इसे करने का कोई तरीका है? अग्रिम में धन्यवाद!

जवाबों:


16

आप ऐसा आसानी से कर सकते हैं। आपको बस एक पुनर्निर्देशन पैरामीटर निर्दिष्ट करने की आवश्यकता है। यदि आप लॉगिन पेज पर जाने के लिए होमपेज पर लॉगिन लिंक का उपयोग कर रहे हैं, तो @ sisir का समाधान सही है।

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>

यदि आप सामने पृष्ठ पर एक कस्टम फ़ॉर्म का उपयोग कर रहे हैं, तो अंदर <form>, सुनिश्चित करें कि आप किसी छिपे हुए फ़ील्ड में url के साथ रीडायरेक्ट करना चाहते हैं

<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" />

और अगर आप wp_login_form()फॉर्म जनरेट करने के लिए उपयोग कर रहे हैं , तो एक पैरामीटर भरें - http://codex.wordpress.org/Function_Reference/wp_login_form

<?php
$args = array(
        'echo' => true,
        'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 
        'form_id' => 'loginform',
        'label_username' => __( 'Username' ),
        'label_password' => __( 'Password' ),
        'label_remember' => __( 'Remember Me' ),
        'label_log_in' => __( 'Log In' ),
        'id_username' => 'user_login',
        'id_password' => 'user_pass',
        'id_remember' => 'rememberme',
        'id_submit' => 'wp-submit',
        'remember' => true,
        'value_username' => NULL,
        'value_remember' => false );

wp_login_form( $args );
?>

आपके पास या आवश्यकता के अनुसार अन्य पैरामीटर बदलें।


मैं कस्टम फ़ॉर्म का उपयोग कर रहा हूं, और मैं आपके प्रदान किए गए छिपे हुए फ़ील्ड समाधान का उपयोग कर रहा हूं, लेकिन मेरे मामले में मुझे इस तरह से 'लोकलहोस्ट / वर्डप्रेस / लोकलहोस्ट / वर्डप्रेस / ब्लॉग / किसी' को यूआरएल करने के लिए पुनर्निर्देशित किया जा रहा है। कोई मदद?
रफी

मुझे यह मिल गया है, मैं डबल स्लैश का उपयोग कर रहा हूं। तो मेरा समाधान इस तरह है <? php गूंज '//'। $ _SERVER ["HTTP_HOST"]। $ _SERVER [ "REQUEST_URI"]; ?>
रफ़ी

6

के the_permalink()रूप में गुजरने की कोशिश करो$redirectतर्क के :

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( the_permalink() );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

संपादित करें:

क्षमा करें, मूल रूप से आपके प्रश्न को गलत समझा। इसे इस्तेमाल करे:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] );
        wp_redirect( $redirect );
        exit;
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

ध्यान दें: wp_redirect()आम तौर पर उचित उपयोग को जोड़ने की आवश्यकता होती है exit;, जिसे मैंने अपने दूसरे उदाहरण में जोड़ा है।


इसका कोई मतलब नहीं है, पुनर्निर्देशित को घर जाने की जरूरत है, यह ठीक काम कर रहा है मुझे मूल यूआरएल को पकड़ने और उपयोगकर्ता को पुनर्निर्देशित करने के लिए किसी तरह की आवश्यकता है जब वह लॉग इन करता है।
जेवियर विलानुएवा

क्षमा करें, मूल रूप से आपके प्रश्न को गलत समझा। मैंने एक संपादन जोड़ा है जो आपके उपयोग के मामले को उम्मीद से संबोधित करता है।
चिप बेनेट

4

सभी को धन्यवाद, मैंने एक तरह का उपयोग किया जो सभी ने सिफारिश की थी इसलिए अंत में मेरा कोड इस तरह दिखता है:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

और मेरे लॉगिन फॉर्म पर (मैं अपने लॉगिन फॉर्म को मेरे अप्रचलन धन्यवाद में हार्डकॉउडिंग कर रहा हूं @Ashfame मुझे wp_login_form के बारे में बताने के लिए मुझे पता नहीं था कि यह मौजूद है) मैंने इसे तब जोड़ा जब उपयोगकर्ता क्रेडेंशियल्स ठीक हैं और वे लॉगिन करने के लिए तैयार हैं:

if (isset($_REQUEST['redirect_to'])){
    wp_redirect($_REQUEST['redirect_to']);
    // wp_redirect() does not exit automatically, and should almost always be followed by a call to exit;
    exit;

} else {
    wp_redirect(get_bloginfo('url') . '/groups/');
    exit;
}

आपकी मदद के लिए बहुत धन्यवाद, मैंने सभी को वोट दिया!


हाय जेवियर, आपने किस फ़ाइल में इन कार्यों को जोड़ा? धन्यवाद।
टायलर डर्डन


4
आपको फोन करना चाहिए exit()या die()उसके बाद wp_redirect()। अन्यथा यह संभव है कि कोड wp_redirect()निष्पादित होने के बाद , जिससे बग और सुरक्षा कमजोरियां हो सकती हैं।
इयान डन

2

यह मेरा कोड है जो मैं लोगों को लॉगिन पृष्ठ को निर्देशित करने के लिए उपयोग करता हूं। फिर जब वे लॉग इन हुए तो वापस वहीं आ गए जहां वे थे। लेकिन यह होम पेज नहीं है बल्कि वर्डप्रेस लॉगिन पेज है जहां मैं कस्टम लॉगिन सेट करता हूं।

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?>

आप के साथ अनुसंधान करना चाहते हो सकता है। आमतौर पर आपको उपयोगकर्ता का वर्तमान यूआरएल प्राप्त होगा$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]


0

login_redirectफिल्टर हुक एक अधिक पूर्ण और प्रभावी समाधान यहाँ है। इस तरह, आप उपयोगकर्ताओं के विभिन्न स्तरों के लिए अलग-अलग पुनर्निर्देशित पथों की पेशकश कर सकते हैं, या लॉग इन (यानी गलत पासवर्ड) होने पर त्रुटि के मामले में पुनर्निर्देशित URL को बनाए रख सकते हैं।

function login_redirect( $redirect_to, $request, $user ){
  if(isset($_REQUEST['redirect_to'])){
    return $_REQUEST['redirect_to'];
  }
  return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );

function restrict_access_if_logged_out(){
  if (!is_user_logged_in() && !is_home()){
    $redirect = home_url() . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    wp_redirect( $redirect );
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

0

इसने आपके किसी भी जवाब पर काम नहीं किया है, लेकिन केवल एक छोटी सी चीज को जोड़कर काम किया है! यहाँ मेरा कोड:

function login_redirect( $redirect_to, $request, $user ){
  if(isset($_REQUEST['redirect_to'])){
    return $_REQUEST['redirect_to'];
  }
  return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );

function restrict_access_if_logged_out(){
  if (!is_user_logged_in() && !is_home()){
    $redirect = home_url() . '/wp-login.php?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]));
    wp_redirect( $redirect );
    exit;
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

केवल मैंने /wp-login.php@ मैट की प्रतिक्रिया की तुलना में जोड़ा , लेकिन मेरे लिए यह महत्वपूर्ण है। उम्मीद है की वो मदद करदे! :)

** संपादित करें:

मैंने एक त्रुटि का पता लगाया जब आप HTTPS में navegate के लिए वर्डप्रेस बल हैं। यह विधि काम नहीं करती है क्योंकि पुनर्निर्देशन HTTP में है। समस्या को ठीक करने के लिए मैंने फ़ंक्शन को बदल दिया। यह परिणाम है:

function restrict_access_if_logged_out(){
  global $wp;
  $protocol='http';
  if (isset($_SERVER['HTTPS']))
    if (strtoupper($_SERVER['HTTPS'])=='ON')
      $protocol='https';
  if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){
    $redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]);
    wp_redirect( $redirect );
    exit;
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

मैं प्रोटोकॉल की जांच करता हूं और फिर मैंने 'हटा दिया esc_url' और सही प्रोटोकॉल जोड़ा $protocol://:। इसके अलावा मैं बदल गया ""

मैं इस पृष्ठ पर आधारित हूं ।


0

मुझे पता है कि यह सुपर लेट है, लेकिन मैंने इस बारे में एक पोस्ट की कि भविष्य के लोगों को यह पता चले और इसकी आवश्यकता हो तो यह कैसे करें:

http://www.ryanprejean.com/force-login-with-redirect-and-exceptions/


हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक हिस्सों को यहां शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं। देखें कैसे जवाब दें
गैब्रियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.