प्लग इन करने से पहले प्लग-इन लोड करने पर मैं wp_get_current_user () कॉल कैसे करूं?


10

वर्तमान परिणाम "PHP घातक त्रुटि: अपरिभाषित फ़ंक्शन को कॉल करें wp_get_current_user ()" जो समझ में आता है, लेकिन मदद नहीं करता है।

मुझे $ 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
प्लग प्लग करने योग्य से पहले लोड किए जाते हैं, लेकिन उसके बाद अच्छी तरह से हुक उपलब्ध हैं । उस कोड को पोस्ट करें, जिसके साथ आप काम कर रहे हैं और हम आपको बेहतर हुक खोजने में मदद कर सकते हैं।
इमान

$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; }
PAFoster

मुझे पता है कि कोई भी सही नहीं है, 'init' बिट मुझे समझ में नहीं आता है लेकिन किसी और से एक सुझाव था। मैं इस धारणा के तहत था कि यह किसी फाइल को लोड करने जैसा है - मेरे मामले में pluggable.php - वास्तव में मुझे बस $ current_user-> user_login
PAFoster

जवाबों:


8

@ EAMann के उत्तर में जोड़ने के लिए, आपको अपनी 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
}

ध्यान दें कि हम रुचि नहीं रखते हैं कि यह फ़ंक्शन क्या देता है । हम में रुचि रखते हैं , जब इस समारोह निष्पादित करता है, अर्थात्, के बादpluggable.php फ़ाइल लोड करने और अपने परिभाषित किया गया है wp_get_current_user()समारोह।

इसलिए, इस फ़ंक्शन के लिए वापसी मान के साथ कुछ भी करने की उम्मीद न करें। इसके बजाय, इस फ़ंक्शन को उस सब कुछ के लिए शुरुआती बिंदु के रूप में मानें जो आप वर्तमान उपयोगकर्ता की जानकारी प्राप्त करने के बाद करना चाहते हैं।

एक प्लगइन में यह कर

संपूर्णता के लिए, यहां बताया गया है कि आप अपने प्लग इन के संदर्भ में किस तरह से एक समान प्लग-इन फ़ंक्शन का उपयोग करेंगे:

(इसे अपने pluginsफ़ोल्डर के अंदर .php फ़ाइल में रखें)

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


यदि कोई प्लग-इन चलाने का मौका देने से पहले एक प्लगइन का व्यवस्थापक पृष्ठ HTML आउटपुट करता है, तो आप कैसे plugins_loadedचलाने के लिए एक क्रिया का उपयोग करेंगे ? मुझे एक समस्या हो रही है कि प्लगइन लोड होने पर WP हेडर (और सामग्री और पाद लेख) का उपयोग करते हुए एक पृष्ठ परिभाषित किया गया है , अच्छी तरह से चलने से पहले । मैं अंदर कार्यों के लिए उपयोग करना चाहते हैं (उपयोगकर्ता डेटा तक पहुँचने और पुनर्निर्देशन करने के लिए), लेकिन यह असंभव लगता है। क्या आपने उपयोग किया है ? wp_safe_redirect()header('Location: …')add_menu_page(…)plugins_loadedpluggable.phpadd_menu_pageplugins_loaded
क्विन कॉमेन्डेंट

1
कोई बात नहीं, यह असंभव लग रहा था, लेकिन ऐसा नहीं था- मुझे अपने कोड में कोई त्रुटि थी। वास्तव में लोड ऑर्डर बिल्कुल वैसा ही है जैसा कि: 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
हां, लेकिन wp_get_current_user () उपलब्ध होने तक आपको $ current_user नहीं मिल सकता है और चूंकि यह फ़ंक्शन प्लगएबल में है। पीएचपी, प्लगइन्स लोड होने के बाद तक यह उपलब्ध नहीं है। इसलिए अपरिभाषित फ़ंक्शन त्रुटि।
23

0

बस इस फ़ंक्शन को अपने प्लगइन .php फ़ाइल में जोड़ें

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

फिर इसे कहीं भी कॉल करें जिसे आप उपयोगकर्ता लॉगिन स्थिति प्राप्त करना चाहते हैं। उदाहरण के लिए:

echo is_logged_in();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.