Pluggable.php'den önce eklentiler yüklendiğinde bir eklentide wp_get_current_user () öğesini nasıl arayabilirim?


10

Geçerli sonuç "PHP Fatal error: Anlamsız, ancak yardımcı olmayan tanımsız işlev wp_get_current_user () çağrısıdır.

$ Current_user kullanmam gerekiyor.

İşte şu anda kullanıyorum kodu:

$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
Eklentiler, takılabilirden önce yüklenir, ancak bundan sonra kancalar mevcuttur. Birlikte çalıştığınız kodu gönderin, daha iyi bir kanca bulmanıza yardımcı olabiliriz.
EAMann

$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

Bunların hiçbirinin doğru olduğunu bilmiyorum, 'init' biti anlamıyorum ama başka birinden bir öneriydi. Ben bir dosya yüklemek gibi bir şey yaptı izlenimi altında - benim durumumda pluggable.php - gerçekten ihtiyacım olan sadece $ current_user-> user_login
PAFoster 14:12

Yanıtlar:


8

@ EAMann'ın cevabına eklemek için, wp_get_current_user()çağrınızı (veya içinde tanımlanan bir fonksiyona erişmeye çalışan herhangi bir çağrıyı pluggable.php) 'plugins_loaded'eylemin içine kaydırmanız gerekir .

Yani, bunu functions.phpdosyanızın içine yerleştiriyorsanız , şu şekilde yapın:

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
}

Bu işlevin ne döndürdüğüyle ilgilenmediğimizi unutmayın . Biz ilgilendiğiniz zaman bu fonksiyon yürütür , yani sonrapluggable.php dosya yüklenir ve tanımlamıştır wp_get_current_user()işlevi.

Bu nedenle, bu işlev için dönüş değeri olan bir şey yapmayı beklemeyin. Bunun yerine, bu işlevi geçerli kullanıcının bilgisini aldıktan sonra yapmak istediğiniz her şeyin başlangıç ​​noktası olarak düşünün.

Bir eklentide yapmak

Tamlık uğruna, kendi eklentiniz bağlamında benzer bir takılabilir işleve nasıl erişeceğiniz aşağıda açıklanmıştır:

(bunu pluginsklasörünüzdeki bir .php dosyasının içine koyun )

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

Bu tekniği, kullanıcıyı kullanarak oturum açmamışlarsa belirli bir sayfaya yönlendiren çok basit bir "Çok Yakında" eklenti türü için başarıyla kullandım wp_safe_redirect().


bir eklentinin yönetici sayfası çalıştırma şansı olmadan önce HTML çıktısı verirse plugins_loadedçalıştırmak için bir eylemi nasıl kullanırsınız ? Eklenti yüklendiğinde, WP üstbilgisi (ve içerik ve altbilgi) kullanılarak tanımlanan bir sayfanın çıktılar, daha önce çalıştırıldığı bir sorun yaşıyorum . (Kullanıcı verilerine erişmek ve yönlendirmeler yapmak için) içindeki işlevlere erişmek istiyorum, ancak bu imkansız görünüyor. Eğer kullandınız mı ile ? wp_safe_redirect()header('Location: …')add_menu_page(…)plugins_loadedpluggable.phpadd_menu_pageplugins_loaded
Quinn Comendant

1
Boş ver, imkansız görünüyordu, ama öyle değildi — Kodumda bir hata vardı. Aslında yükleme sırası tam olarak beklendiği gibi: plugins are includedpluggable.php is included'plugins_loaded' is triggered'load-{page_hook}' is triggered'page_hook' is triggered
Quinn Comendant

3

Sorun, bir WordPress kancası yerine kodu doğrudan yüklemeye çalışmanızdır. WordPress belirli bir düzen içinde bir kod demet yükler (siz eylemlerin listesi tipik bir istekte ateş görebilirsiniz Kodeksi ).

Kodunuzu doğrudan tetiklemeye çalıştığınızda pluggable.php, yüklemeden hemen önce yürütüyorsunuz . Ve olmamalıdır deneyin include()doğrudan bu dosyada. WordPress'in sizin için yapmasına izin verin.

Bunun yerine, kullanıcı bilgilerini alan bir işlev tanımlayın:

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

Daha sonra bu işlevi temanızın herhangi bir yerinde sorunsuz kullanabilirsiniz. Örneğin:

echo wpse_58429();

$current_userBaşka bir kodda kullanmanız gerekiyorsa , bu kodu bir WordPress eylemiyle tetiklediğinizden emin olun ... doğrudan çağırma veya işlev kullanılabilir olmadan önce yürütülecektir.


0

Bazı işlevler kullanılabilir olmadan önce kodunuzu yüklüyorsunuz. Denedin mi:

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

1
Evet, ancak wp_get_current_user () kullanılabilir olana kadar $ current_user alamazsınız ve bu işlev pluggable.php dosyasında olduğu için, eklentiler yüklenene kadar kullanılamaz. Bu nedenle tanımlanmamış işlev hatası.
PAFoster

0

Bu işlevi eklenti .php dosyanıza eklemeniz yeterlidir

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

Ardından, kullanıcı oturum açma durumunu almak istediğiniz herhangi bir yeri arayın. Örneğin:

echo is_logged_in();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.