লগইন করার পরে ব্যবহারকারীকে মূল ইউআরএলে পুনর্নির্দেশ করবেন?


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

আপনি এটি সহজেই করতে পারেন। আপনাকে কেবল একটি পুনর্নির্দেশ প্যারামিটার নির্দিষ্ট করতে হবে। আপনি যদি লগইন পৃষ্ঠায় যেতে হোমপেজে লগইন লিঙ্কটি ব্যবহার করেন তবে @ সিসিরের সমাধানটি সঠিক।

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

আপনি যদি প্রথম পৃষ্ঠায় একটি কাস্টম ফর্ম ব্যবহার করছেন, তবে এর অভ্যন্তরে <form>, ইউআরএল পুনর্নির্দেশের জন্য কোনও লুকানো ক্ষেত্র পূরণ করেছেন তা নিশ্চিত করুন

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

এবং যদি আপনি wp_login_form()ফর্মটি তৈরি করতে ব্যবহার করেন তবে একটি পরামিতি পূরণ করুন - http://codex.wordpress.org/Function_References/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;যা আমি আমার দ্বিতীয় উদাহরণটিতে যুক্ত করেছি।


এটার কোন মানে হয় না, পুনর্নির্দেশ চাহিদা বাড়িতে যেতে যে সূক্ষ্ম কাজ করছে আমি মূল URL ধরা ও সেখানে ব্যবহারকারী পুনর্নির্দেশ করতে কিছু উপায় প্রয়োজন একবার তিনি লগ করা হয়।
জাভিয়ের মধ্যে Villanueva

দুঃখিত, আপনার প্রশ্নটি মূলত ভুল বুঝেছি। আমি এমন একটি সম্পাদনা যুক্ত করেছি যা আশা করি আপনার ব্যবহারের ক্ষেত্রে সম্বোধন করবে।
চিপ বেনেট

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 );

এবং আমার লগইন ফর্মটিতে (আমি আমার আবেদনটিতে আমার লগইন ফর্মটি হার্ডকোড করছি ধন্যবাদ @ আশফাম আমাকে ডাব্লুপি_লগিন_ফর্ম সম্পর্কে আমার জানাতে বলার জন্য এটির কোনও ধারণা ছিল না) যখন ব্যবহারকারীর শংসাপত্রগুলি ঠিক থাকে এবং তারা লগইন করতে প্রস্তুত থাকে:

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

এটি আমার কোড যা আমি লোকজনকে ডাব্লুপিপি লগইন পৃষ্ঠাতে সরাসরি ব্যবহার করতে ব্যবহার করি use তারপরে লগ ইন করার পরে তারা যেখানে ছিল সেখানে ফিরে আসল। তবে এটি হোম পেজ নয় বরং ওয়ার্ডপ্রেস লগইন পৃষ্ঠা যেখানে আমি কাস্টম লগইন সেটআপ করি।

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

আপনি গবেষণা চাই। সাধারণত আপনি কোনও ব্যবহারকারীর বর্তমান url পাবেন$_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@ ম্যাট এর প্রতিক্রিয়া তুলনায় কেবল আমি যোগ করেছি , তবে আমার পক্ষে মূল বিষয় ছিল। আশা করি এইটি কাজ করবে! :)

** সম্পাদনা করুন:

যখন আপনি এইচটিটিপিএস-এ নেভগেটে ফোর্স ওয়ার্ডপ্রেস থাকবেন তখন আমি একটি ত্রুটি সনাক্ত করেছি। এই পদ্ধতিটি কাজ করে না কারণ পুনর্নির্দেশটি 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/


যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে। কিভাবে উত্তর দিতে দেখুন ।
গ্যাব্রিয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.