প্লাগইন.এফপি এর আগে প্লাগইনগুলি লোড হয়ে গেলে আমি প্লাগইনে wp_get_current_user () কে কীভাবে কল করব?


10

বর্তমান ফলাফলটি "পিএইচপি মারাত্মক ত্রুটি: অপরিজ্ঞাত ফাংশন কল করুন wp_get_current_user ()" যা অর্থবোধ করে, কিন্তু সাহায্য করে না।

আমার $ কারেন্ট_উজার ব্যবহার করা দরকার।

আমি বর্তমানে কোডটি ব্যবহার করছি:

$wp->init(); 
do_action( 'init' ); // Check site status 
$file='http://xxxxxxxx.com/wp-admin/wp_includes/pluggable.php'; 
if ( is_multisite() ) { 
    if ( true !== ( $file = ms_site_check() ) ) { 
        require( $file );
        die(); 
    } 
    unset($file); 
}

// Get the current user's info 
$current_user = wp_get_current_user(); 

if ( !($current_user instanceof WP_User) ) 
    return; 

echo $current_user->user_login; 

function paf_uname(){ 
    return $current_user->user_login; 
}

1
প্লাগইনগুলি প্লাগেবলের আগে লোড করা হয়, তবে এর পরে খুব ভালভাবে হুক পাওয়া যায়। আপনি যে কোডটির সাথে কাজ করছেন তা পোস্ট করুন এবং আমরা আপনাকে আরও ভাল হুক খুঁজে পেতে সহায়তা করতে পারি।
EAMAN

$wp->init(); do_action( 'init' ); // Check site status $file='http://taddy.co.uk/wp-admin/wp_includes/pluggable.php'; if ( is_multisite() ) { if ( true !== ( $file = ms_site_check() ) ) { require( $file ); die(); } unset($file); } // Get the current user's info $current_user = wp_get_current_user(); if ( !($current_user instanceof WP_User) ) return; echo $current_user->user_login; function paf_uname(){ return $current_user->user_login; }
পিএএফএসস্টার

আমি জানি যে এর কোনওটিই ঠিক নয়, 'থিম' বিটটি আমি বুঝতে পারি না তবে এটি অন্য কারও পরামর্শ ছিল। আমার এই ধারণাটি ছিল যে এটি কোনও ফাইল লোড করার মতো কিছু করেছিল - আমার ক্ষেত্রে প্লাগেবল.এফপি - আসলে আমার যা প্রয়োজন কেবল তা কেবল $
বর্তমান_ ব্যবহারকারী-

উত্তর:


8

@ ই্যামান এর উত্তরে যুক্ত করতে, আপনাকে অ্যাকশনের মধ্যে আপনার wp_get_current_user()কলটি (বা কোনও কল যা এর মধ্যে সংজ্ঞায়িত কোনও ফাংশন অ্যাক্সেস করার চেষ্টা করে pluggable.php) আবৃত করতে হবে 'plugins_loaded'

সুতরাং, যদি আপনি এটি আপনার functions.phpফাইলের ভিতরে রাখছেন তবে এটি এটি করুন:

add_action( 'plugins_loaded', 'get_user_info' );

function get_user_info(){
  $current_user = wp_get_current_user(); 

  if ( !($current_user instanceof WP_User) ) 
    return; 

  echo $current_user->user_login;

  // Do the remaining stuff that has to happen once you've gotten your user info
}

নোট যে আমরা কি এই ফাংশন আগ্রহী নন, তাহলে কি আয় । আমরা প্রতি আগ্রহ দেখিয়েছেন যখন এই ফাংশন , executes , যথা, পরেpluggable.php ফাইলটি লোড এবং আপনার সংজ্ঞায়িত করেছে wp_get_current_user()ফাংশন।

সুতরাং, এই ফাংশনটির জন্য রিটার্ন মান সহ কিছু করার আশা করবেন না। পরিবর্তে, বর্তমান ব্যবহারকারীর তথ্য পাওয়ার পরে আপনি যা করতে চান তার প্রতিটি সূচনার পয়েন্ট হিসাবে এই ফাংশনটিকে বিবেচনা করুন।

এটি একটি প্লাগইনে করছেন

সম্পূর্ণতার জন্য, আপনি নিজের প্লাগইনের প্রসঙ্গের মধ্যে থেকে কীভাবে অনুরূপ প্লাগযোগ্য ফাংশনটি অ্যাক্সেস করতে পারবেন তা এখানে:

(এটি আপনার pluginsফোল্ডারের ভিতরে একটি .pp ফাইলের মধ্যে রাখুন )

class WPSE_58429 {
    public function __construct(){
        add_action( 'plugins_loaded', array( $this, 'check_if_user_logged_in' ) );
    }

    public function check_if_user_logged_in(){
        if ( is_user_logged_in() ){
           // ... do stuff for your logged-in user
        }
    }
}

$wpse_58429_plugin = new WPSE_58429();

আমি এই কৌশলটি খুব সহজ "আসন্ন শীঘ্রই" ধরণের প্লাগইনের জন্য সফলভাবে ব্যবহার করেছি যা ব্যবহারকারীরা লগ ইন না করে যদি একটি নির্দিষ্ট পৃষ্ঠায় পুনর্নির্দেশ করে wp_safe_redirect()


কোনও প্লাগইনের প্রশাসক পৃষ্ঠাটি এইচটিএমএল চালানোর সুযোগ পাওয়ার আগেই কীভাবে plugins_loadedচালানোর জন্য কোনও পদক্ষেপ ব্যবহার করবেন ? আমার একটি সমস্যা হচ্ছে যেখানে একটি পৃষ্ঠা ডাব্লুপি হেডার (এবং সামগ্রী এবং পাদলেখ) ব্যবহার করে সংজ্ঞায়িত করা হয় যখন প্লাগইন লোড হয়, ঠিক আগে চালিত হওয়ার আগে । আমি ভিতরে ফাংশনগুলিতে অ্যাক্সেস পেতে চাই (ব্যবহারকারীর ডেটা অ্যাক্সেস এবং পুনঃনির্দেশগুলি করার জন্য) তবে এটি অসম্ভব বলে মনে হচ্ছে। আপনি ব্যবহার করেছেন ? wp_safe_redirect()header('Location: …')add_menu_page(…)plugins_loadedpluggable.phpadd_menu_pageplugins_loaded
কুইন কমেন্ডেন্ট

1
কিছু মনে করবেন না, এটি অসম্ভব বলে মনে হয়েছিল, তবে এটি ছিল না my আমার কোডটিতে আমার একটি ত্রুটি ছিল। আসলে লোড plugins are includedpluggable.php is included'plugins_loaded' is triggered'load-{page_hook}' is triggered'page_hook' is triggered
ক্রমটি

3

সমস্যাটি হ'ল আপনি ওয়ার্ডপ্রেস হুকের পরিবর্তে কোডটি সরাসরি লোড করার চেষ্টা করছেন। ওয়ার্ডপ্রেস একটি নির্দিষ্ট ক্রমে একগুচ্ছ কোড লোড করে (আপনি কোডেক্সে একটি সাধারণ অনুরোধে কর্মের তালিকা দেখতে পাবেন )।

আপনার কোডটি সরাসরি pluggable.phpচালিত করার চেষ্টা করে আপনি লোড হওয়ার ঠিক আগে সম্পাদন করছেন । এবং আপনার সরাসরি এই ফাইলটি চেষ্টা করা উচিত নয়include() । ওয়ার্ডপ্রেস আপনার জন্য এটি করতে দিন।

পরিবর্তে, একটি ফাংশন সংজ্ঞা দিন যা ব্যবহারকারীর তথ্য পায়:

function wpse_58429() {
    // Get the current user's info 
    $current_user = wp_get_current_user(); 

    if ( !($current_user instanceof WP_User) ) 
        return; 

    return $current_user->user_login; 
}

তারপরে আপনি ইস্যু ছাড়াই আপনার থিমের যে কোনও জায়গায় এই ফাংশনটি ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:

echo wpse_58429();

যদি আপনাকে $current_userঅন্য কোড ব্যবহার করতে হয় তবে নিশ্চিত হয়ে নিন যে আপনি সেই কোডটি একটি ওয়ার্ডপ্রেস ক্রিয়া দিয়ে ফায়ার করেছেন ... সরাসরি কল করবেন না বা ফাংশনটি উপলব্ধ হওয়ার আগেই এটি কার্যকর করা হবে।


0

দেখে মনে হচ্ছে নির্দিষ্ট ফাংশনগুলি উপলভ্য হওয়ার আগে আপনি আপনার কোডটি লোড করছেন। আপনি চেষ্টা করেছেন:

 global $current_user; 
 //print_r($current_user); //all user related information
echo $current_user->ID; //get current user id 

1
হ্যাঁ, তবে আপনি ডাব্লুপি_জেট_কন্টেন_উজার () উপলব্ধ না হওয়া অবধি $ কারেন্ট_উজার পাবেন না এবং যেহেতু সেই ফাংশনটি প্লাগেবল.এফপি-তে রয়েছে, প্লাগিনগুলি লোড হওয়ার পরে এটি উপলব্ধ নয় available অতএব অপরিবর্তিত ফাংশন ত্রুটি।
পিএএফএসস্টার

0

আপনার প্লাগইন। Php ফাইলে এই ফাংশনটি কেবল যুক্ত করুন

function is_logged_in(){
    if(function_exists( 'is_user_logged_in' )) {
        return is_user_logged_in();
    }
}

তারপরে আপনি ব্যবহারকারী লগইন স্থিতি পেতে যে কোনও জায়গায় কল করুন উদাহরণ স্বরূপ:

echo is_logged_in();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.