我的插件有一个主类。它正在init
操作上实例化。我认为这足以能够使用像is_user_logged_in()
这样的Wordpress函数,但我得到一个致命的错误:调用未定义的函数。下面是我的代码(简化)。 请参阅此问题底部的更新。
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();在其中一个包含的文件中,它返回&#34; exists&#34;,所以它有效。我尝试了所有上面的动作钩子来实例化我的类,它们都有效。为什么是这样?不同之处在于运行我的类定义下面的函数,而不是在包含文件中运行它。
答案 0 :(得分:1)
您是否尝试过直接将代码放在类中而不使用require_once?
另外,我认为require_once
仅在第一次创建类时包含该文件。
-
我不认为问题是因为该功能是可插拔的。以下代码输出:&#34;存在&#34;
function test_fn() {
if ( function_exists('is_user_logged_in') )
echo 'exists';
else
echo 'doesnt exist';
}
add_action('init', 'test_fn');
答案 1 :(得分:1)
尝试如下..
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..!';
}
}
请检查hook list