У меня есть основной класс для моего плагина. Он создается на init
действие. Я думал, что этого будет достаточно, чтобы иметь возможность использовать функции WordPress, такие как is_user_logged_in()
, но я получаю фатальную ошибку: вызов неопределенной функции. Ниже мой код (упрощенно). Пожалуйста, смотрите обновление в нижней части этого вопроса.
fd_main.php
<?php
Class Find_Do_For_Anspress{
private function includes(){
require_once(FIND_DO_FOR_ANSPRESS_DIR.'fd_echo.php');
}
}//End class
function find_do_for_anspress() {
$FDClassStart = new Find_Do_For_AnsPress();
}
add_action('init', 'find_do_for_anspress');
?>
fd_echo.php
<?php
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
echo $current_user;
} else {
echo 'Not logged in!';
}
?>
Ошибка: Fatal error: Call to undefined function is_user_logged_in() in /home/effilxhy/public_html/WP/wp-content/plugins/find-do-for-anspress/fd_echo.php on line 1
На основании предоставленного ответа:
//This returns 'exist'. This is outside the main class on the same script.
function test_fn() {
if ( function_exists('is_user_logged_in') )
echo 'exists';
else
echo 'doesnt exist';
}
add_action('init', 'test_fn');//This returns 'doesn't exist'. Why doesn't this work?
function test_fn() {
if ( function_exists('is_user_logged_in') )
echo 'exists';
else
echo 'doesnt exist';
}
test_fn();
Так что я думаю, что нашел что-то убедительное, но я не уверен, что с этим делать. Я определял функцию внутри класса. Я создавал класс с init
, wp_head
, а также wp_loaded
, я бегал Find_Do_For_Anspress::test_fn();
сразу после определения класса. Это не сработало. Однако, когда я запускаю Find_Do_For_Anspress :: test_fn (); внутри одного из включенных файлов он возвращает «существует», поэтому он работает. Я попробовал все вышеупомянутые действия, чтобы создать экземпляр моего класса, и все они работали. Почему это? Разница заключалась в том, что функция выполнялась под моим определением класса, а не во включенном файле.
Вы пытались разместить код непосредственно внутри класса, не используя require_once?
Также я думаю require_once
включает файл только при первом создании класса.
—
Я не думаю, что проблема в том, что функция подключаема. Следующий код выводит: «существует»
function test_fn() {
if ( function_exists('is_user_logged_in') )
echo 'exists';
else
echo 'doesnt exist';
}
add_action('init', 'test_fn');
Попробуйте следующим образом ..
add_action( 'wp_head', 'check_user_login' );
function check_user_login() {
if ( is_user_logged_in() ) {
echo 'You are in login state';
} else {
echo 'Sorry..!';
}
}
пожалуйста, проверьте список подключений