pluging.phpの前にプラグインがロードされている場合、プラグインでwp_get_current_user()を呼び出すにはどうすればよいですか?


10

現在の結果は「PHP Fatal error:Call to undefined function 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
プラグインはプラグイン可能になる前にロードされますが、その後も利用可能なフックがあります。作業中のコードを投稿してください。より適切なフックを見つけるのに役立つ場合があります。
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 2012

私はそのどれも正しくないことを知っています。「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()


plugins_loaded実行wp_safe_redirect()する前にプラグインの管理ページがHTMLを出力する場合、アクションを使用してどのようheader('Location: …')に実行しますか?を使用して定義されたページadd_menu_page(…)が、プラグインがロードされるときにplugins_loaded実行される前にWPヘッダー(およびコンテンツとフッター)を出力するという問題があります。pluggable.php(ユーザーデータにアクセスしてリダイレクトするために)内部の機能にアクセスしたいのですが、これは不可能のようです。で使用add_menu_pageしましたplugins_loadedか?
Quinn Comendant 2015年

1
気にしないでください、それは不可能に思えましたが、不可能ではありませんでした。コードにエラーがありました。実際には、負荷順序が期待どおりにある:plugins are includedpluggable.php is included'plugins_loaded' is triggered'load-{page_hook}' is triggered'page_hook' is triggered
クインComendant

3

問題は、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アクションでそのコードを実行してください。直接呼び出さないでください。関数が使用可能になる前に実行されます。


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を取得できません。その関数はpluggable.phpにあるため、プラグインがロードされるまで使用できません。したがって、未定義の関数エラーです。
PAFoster 2012

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.