ব্যবহারকারী JQuery ব্যবহার করে লগ ইন করেছেন কিনা তা পরীক্ষা করুন


17

আমি কাস্টম jquery কোডটি কার্যকর করতে চাই যা ব্যবহারকারীর জন্য লগইন ডায়ালগ দেখায় যদি তিনি একটি বোতাম টিপেন এবং তিনি লগ ইন না হন? আমি কীভাবে এটি করতে পারি?

উত্তর:


26

যদি আপনি বর্তমান মুহুর্তে ব্যবহারকারী লগ ইন করেছেন তবে আপনি জানতে চান। অন্যান্য উত্তরগুলি জাভাস্ক্রিপ্ট চালানোর সময় পৃষ্ঠাটি লোড না করা অবস্থায় ব্যবহারকারী লগ ইন হয়েছে কিনা তা পরীক্ষা করে থাকে। উদাহরণস্বরূপ ব্যবহারকারী পৃথক ট্যাবে লগ ইন করতে পারতেন

আপনার জাভাস্ক্রিপ্ট এ রাখুন

var data = {
    action: 'is_user_logged_in'
};

jQuery.post(ajaxurl, data, function(response) {
    if(response == 'yes') {
        // user is logged in, do your stuff here
    } else {
        // user is not logged in, show login form here
    }
});

আপনার ফাংশন.এফপি এ রাখুন

function ajax_check_user_logged_in() {
    echo is_user_logged_in()?'yes':'no';
    die();
}
add_action('wp_ajax_is_user_logged_in', 'ajax_check_user_logged_in');
add_action('wp_ajax_nopriv_is_user_logged_in', 'ajax_check_user_logged_in');

আজাকুরলের মান কত?
ফেরাস ওদেহ

ওয়ার্ডপ্রেস এটিকে 'thyite.com/wp-admin/admin-ajax.php' এ সেট করে। এটিই url যার উপরে সমস্ত এজাক্স অনুরোধগুলি প্রেরণের কথা রয়েছে
মৃদুল আগরওয়াল

আমি jQuery ক্লিক হ্যান্ডলারের ভিতরে jQuery.post রেখেছি তবে এটি কার্যকর হয় না। কীভাবে এটি সমাধান করবেন আপনার কোনও ধারণা আছে?
ফেরাস ওদেহ

আমি দেখেছি যে আজাকুরল কনসোলে সংজ্ঞায়িত হয়নি।
ফেরাস ওদেহ

1
[কোডেক্স] (কোডেক্স.ওয়ার্ডপ্রেস.আর.আজএএক্সএক্স_ইন প্লাগইনস) বলেছেন যে সর্বশেষতম ওয়ার্ডপ্রেস সংস্করণগুলিতে এটি ইতিমধ্যে সংজ্ঞায়িত। হতে পারে আপনি ডাব্লুপি_লোক্যালাইজ_স্ক্রিপ্ট দিয়ে আজাকুরলের নিজস্ব সংস্করণটি সংজ্ঞায়িত করতে পারেন
মৃদুল আগরওয়াল

32

এর জন্য classবৈশিষ্ট্যটি পরীক্ষা করুন body: থিমটি যদি body_class()শরীরটি ব্যবহার করে তবে logged-inলগ ইন করা ব্যবহারকারীদের জন্য একটি শ্রেণি রয়েছে। সচেতন হন ফাংশনটি উপাদানটিতেও ব্যবহার করা যেতে পারে html

উদাহরণ

if(jQuery('body').hasClass('logged-in')){
    // Do something
}

আপনি is_user_logged_in()স্ক্রিপ্টটি সারণী বা মুদ্রণের জন্য কেবল শর্ত হিসাবেও ব্যবহার করতে পারেন ।


এই উত্তরের শীর্ষস্থানীয় চিহ্নগুলি - সহজ এবং কার্যকর।
কিউ স্টুডিও

আমি logged-inক্লাসের জন্য কেবল শরীর পরীক্ষা করার ধারণাটি পছন্দ করি । থিমগুলি ব্যবহার করে body_class();বা get_body_class();অন্যথায় এটি নিশ্চিত হওয়া উচিত যে এটি কোনও নির্ভরযোগ্য সমাধান নয়। যদিও, আমি আমার থিমগুলিতে এই ফাংশনগুলি ব্যবহার করি, তাই এটি আমার পক্ষে ভাল সমাধান। সহজ ধারণা জন্য ধন্যবাদ।
মাইকেল একলুন্ড

18

দয়া করে আপনার এইচটিএমএল বডিতে বডি_ক্লাস () যুক্ত করুন

<body <?php body_class(); ?>>
   //your html code
</body>

এটি logged-inলগইন করা ব্যবহারকারীর জন্য যুক্ত হবে তবে আপনি কেবলমাত্র লগইড ব্যবহারকারীর জন্য আপনার কাস্টম জুকারি কোডটি কার্যকর করতে নিম্নলিখিত jquery কোডটি ব্যবহার করতে পারেন।

if ($('body').hasClass('logged-in')) {
       //execute your jquery code.
}

আমি জানি না কেন এই একজনকে ভোট দেওয়া হয়েছিল। পদ্ধতির সম্পূর্ণ বৈধ। +1
কায়সার

আমি জানি না। আমারও একই প্রশ্ন আছে। উত্তর বৈধ তবে ভোট কেন ডাউন।
মনিরুল ইসলাম

হুঁ। কারণ এটি সঠিক উপায়ে (ফিল্টার এবং কলব্যাক ব্যবহার করে) এর পরিবর্তে jQuery ব্যবহার করে। কিছু লোক jQuery থেকে অ্যালার্জি করে।
কায়সার

1
ভাল, তবে আপনি পৃষ্ঠা ক্যাশে সক্ষম থাকা ক্যাচিং প্লাগইন ব্যবহার করেন তবে এটি প্রকৃত লগইন স্থিতিকে জানায় না।
জ্যানোস সাজাবো

6

আর একটি উদাহরণ, আপনি যদি এজেএক্স কলগুলির জন্য এটি ব্যবহার করতে চান তবে।

// Simplified... please note, that all names/vars/etc. in my class got unique names.
// ...the same goes for the script handler.
class wpse69814_example
{
    public $response;

    public function __construct()
    {
        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ) );
        add_action( 'wp_enqueue_scripts', array( $this, 'localize' ), 20 );
    }

    public function enqueue()
    {
        wp_enqueue_script(
            'wpse69814_handler',
            plugins_url( 'url/to/file.js', __FILE__ ),
            array( 'jquery' ),
            filemtime( plugins_dir_path( __FILE__ ).'/path/to/file.js' ),
            true
        );
    }

    public function localize()
    {
        wp_localize_script( 'wpse69814_handler, 'wpse69814_object', array(
            'ajaxurl'    => admin_url( 'admin-ajax.php' ),
            'ajax_nonce' => wp_create_nonce( 'wpse69814_nonce' ),
            'action'     => 'wpse69814-handler-action',
            'data'       => array(
               'is_user_logged_in' => is_user_logged_in(),
            )
         )

    }
}

লক্ষণীয়, এই পদ্ধতির সিডিএন পিছনে কাজ করে না। : ডি
ব্রায়ান ফেগটার

@ ব্রায়ানফিগটার মাইটি ব্যাখ্যা করতে (বা এটি সম্পাদনা করতে) কেন চান? :)
কায়সার

যেহেতু সিডিএন ওয়ার্ডপ্রেসের সাথে প্রমাণীকরণ করে না, is_user_logged_inউত্সটি আঘাতের সময় ডিওমে মিথ্যা হিসাবে ক্যাশে হবে যখন কোনও সিডিএন ব্যবহার করার সময় ব্যবহারকারী রাষ্ট্রকে এক্সএইচআর এর মাধ্যমে নো-ক্যাশে থ্রেডে বিমোচন করা উচিত। @ মৃদুল আগরওয়ালের মতামত কাজ করে তবে সাড়া জাগাতে নো-ক্যাশে শিরোনাম রয়েছে।
ব্রায়ান ফেগটার

পছন্দ করুন এটি স্থির ... আমি মনে করি। অন্যান্য উত্তরগুলিকেও উজ্জীবিত করে।
কায়সার

2

দয়া করে নোট করুন যে পৃষ্ঠার ক্যাশেিং প্লাগইন আপনি যদি ব্যবহার করেন তবে উপরের উদাহরণগুলির মধ্যে কোনওটিই নির্ভরযোগ্য নয়, তারপরে বডি ট্যাগের কোডটি স্থির থাকবে। এছাড়াও এটি করার একটি সহজ উপায় রয়েছে (এজাজে কোনও অতিরিক্ত কোয়েরি নেই যা সর্বোত্তম নয়)

আপনি যদি জাভাস্ক্রিপ্টের সাহায্যে লগইন হওয়া ব্যবহারকারীর পরীক্ষা করতে চান, আপনি লগ ইন করার সময় কুকি সেট করতে এবং ব্যবহারকারী লগ আউট হওয়ার সময় কুকি মুছতে আপনি এই কোডটি ব্যবহার করতে পারেন। এটি যুক্ত করুন। আপনার থিম ফাংশন.এফপি

function login_function() {
    setcookie('wp_user_logged_in', 1, time() + 31556926, '/');
    $_COOKIE['wp_user_logged_in'] = 1;
}
add_action('wp_login', 'login_function');

function logout_function() {
    unset($_COOKIE['wp_user_logged_in']);
    setcookie('wp_user_logged_in', null, -1, '/');
}
add_action('wp_logout', 'logout_function');

তারপরে এটি জাভাস্ক্রিপ্টে কুকির একটি সাধারণ পরীক্ষা।

if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
    //do something when user logged in
} else {
    //do something when user logged out
}

এটি প্রকৃতপক্ষে বেশ সহজ, নির্ভরযোগ্য এবং সবচেয়ে খারাপ ক্ষেত্রে পৃষ্ঠা লোডের পরে প্রায় তাত্ক্ষণিকভাবে কার্যকর করা হয় (যদি ফুটারে স্ক্রিপ্ট লোড না করে ব্লক করা থাকে) অন্য উত্তরগুলির বিপরীতে। অ্যাজাক্স ধীর এবং শারীরিক ক্লাসগুলির উপর নির্ভর করা ক্যাশে করাতে ব্যর্থ হবে। কুকি নীতি পাঠ্যে এই কুকিটি যুক্ত করা দরকার। ধন্যবাদ জানোস
রিসার্ড জ্যাড্রাজিক

ফলোআপ হিসাবে, ডিফল্ট ওয়ার্ডপ্রেস কুকিজ এবং সদ্য নির্মিত স্ক্রিপ্ট-অ্যাক্সেসযোগ্য কুকি সিঙ্ক্রোনাইজেশনে সমস্যা আছে তবে কীভাবে সমাধান করবেন সে সম্পর্কে আমি একটি দুর্দান্ত এবং সাধারণ উত্তর পেয়েছি: stackoverflow.com/questions/56208574/…
Ryszard Jędraszyk
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.