web-dev-qa-db-ja.com

プラグインがpluggable.phpの前にロードされたときにどのように私はプラグイン内でwp_get_current_user()を呼び出すのですか?

現在の結果は「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; 
}
10
PAFoster

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

この関数を返すものには興味がありません。 when this functionを実行している、つまり after の後に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()を使用してログインしていない場合、ユーザーを特定のページにリダイレクトする非常に単純な "Coming Soon"タイプのプラグインにこの手法を使用しました。

8
Tom Auger

問題は、WordPressフックではなく直接コードをロードしようとしていることです。 WordPressは特定の順序でたくさんのコードをロードします(あなたは典型的なリクエストで起動されたアクションのリストを見ることができます Codex )。

コードを直接起動しようとすると、pluggable.phpがロードされる直前に実行されます。そして、あなたは はいけません このファイルを直接include()しようとしないでください。 WordPressにあなたのためにそれをやらせましょう。

代わりに、ユーザー情報を取得する関数を定義してください。

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を使用する必要がある場合は、WordPressアクションでそのコードを起動するようにしてください。直接呼び出さないでください。そうしないと、関数が使用可能になる前に実行されます。

3
EAMann

特定の機能が使用可能になる前にコードをロードしているようです。やってみました:

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

プラグインの.phpファイルにこの関数を追加するだけです。

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

それからあなたがユーザーのログインステータスを取得したいところならどこでもそれを呼び出します。例えば:

echo is_logged_in();
0
mahdi azarm