pluggable.php 전에 플러그인이로드 될 때 플러그인에서 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
플러그인은 플러그 가능하기 전에로드되지만 그 이후 에는 후크가 있습니다. 작업중인 코드를 게시하면 더 나은 연결 고리를 찾는 데 도움이 될 수 있습니다.
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

나는 그중 어느 것도 옳지 않다는 것을 안다. 나는 이해하지 못하지만 다른 사람의 제안이었다. 필자는 파일을로드하는 것과 같은 일을했다는 인상을 받았다. 필자의 경우 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(…)플러그인을로드하기 전에 플러그인을로드 할 때 WP 헤더 (및 내용 및 바닥 글)를 사용하여 정의 된 페이지가 출력 되는 문제 plugins_loaded가 있습니다. 내부의 기능 pluggable.php(사용자 데이터에 액세스하고 리디렉션을 수행하기 위해)에 액세스하고 싶지만 이것은 불가능한 것 같습니다. add_menu_page와 함께 사용 했습니까 plugins_loaded?
Quinn Comendant

1
신경 쓰지 마라. 불가능 해 보였지만 그렇지 않았다. 내 코드에 오류가 있었다. 실제로로드 순서는 정확히 예상대로입니다. plugins are includedpluggable.php is included'plugins_loaded' is triggered'load-{page_hook}' is triggered'page_hook' is triggered
Quinn Comendant

3

문제는 WordPress 후크가 아닌 코드를 직접로드하려고한다는 것입니다. WordPress는 특정 순서로 많은 코드를로드합니다 ( Codex 의 일반 요청 에서 실행 된 작업 목록을 볼 수 있음 ).

코드를 직접 실행하려고하면 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다른 코드에서 사용해야 하는 경우 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

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.