Php Wordpress:为什么可以';在初始化init上的主类后,我使用的是用户登录的吗?
我的插件有一个主类。它正在Php Wordpress:为什么可以';在初始化init上的主类后,我使用的是用户登录的吗?,php,wordpress,class,init,Php,Wordpress,Class,Init,我的插件有一个主类。它正在init操作中实例化。我认为这足以使用Wordpress函数,如is\u user\u logged\u in(),但我遇到了一个致命错误:调用未定义的函数。下面是我的代码(简化)请参阅此问题底部的更新。 fd_main.php <?php Class Find_Do_For_Anspress{ private function includes(){ require_once(FIND_DO_FOR_ANSPRESS_DIR.'fd_echo.ph
init
操作中实例化。我认为这足以使用Wordpress函数,如is\u user\u logged\u 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');
?>
<?php
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
echo $current_user;
} else {
echo 'Not logged in!';
}
?>
所以我想我找到了一些结论,但我不确定该怎么做。我在类中定义函数。我用
init
,wp\u head
,和wp\u loaded
实例化这个类。我正在运行Find_Do_For_Anspress::test_fn()代码>就在类定义之后。这不管用。但是,当我运行Find_Do_For_Anspress::test_fn()时;在其中一个包含的文件中,它返回“exists”,因此它可以工作。我尝试了上面所有的动作钩子来实例化我的类,它们都很有效。为什么会这样?区别在于在我的类定义下运行函数,而不是在包含的文件中运行它。您是否尝试过将代码直接放在类中而不使用require\u
另外,我认为require\u once
仅在类第一次创建时才包含该文件
--
我不认为问题是因为函数是可插入的。以下代码输出:“存在”
试着做如下事情
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..!';
}
}
请检查PHP无法定位函数登录的位置()
,您需要帮助PHP查找它并将文件包含在fd\u echo.PHP
中,就像包含一次路径到/theFile.PHP
问题是是用户登录的是一个可插入函数,因此在调用插件逻辑后加载它。解决方案是确保不要过早调用它。init
运行某些操作太早。你到底想达到什么目的?您需要检查用户是否登录插件功能的具体时刻是什么?@brasofilo我允许登录的用户通过我的网站创建Braintree帐户(他们成为“客户”)。因此,我需要用新生成的Braintree ID更新一个自定义表,或者在wp\u用户中插入一个新列,并对其进行更新。对这两个选项中的哪一个有什么建议吗?嗯,这是另一个问题,我认为最好先使用本机函数,而不是创建表。您的is\u user\u logged\u in
不起作用,因为它不在正确的位置,而且您显示的是演示代码,而不是真实情况。我尝试在主类中定义函数,然后直接在类下面使用函数,但我收到了对undefined function error的相同调用。嗯,由于在类内调用函数时,代码会输出错误,并且我在上面提供的代码会输出“存在”(请验证在您的环境中是否存在),因此唯一需要做的假设是WordPress会在定义is\u user\u logged\u
之前以某种方式初始化在“init”引入的类。除非有人来解释,否则我会尝试使用“init”以外的钩子来看看它是否实现了你的目标。因此,如果你能帮我推理的话,我想我找到了一些结论性的东西(我对这一切都不熟悉)。我在类中定义函数。我用init
,wp\u head
,和wp\u loaded
实例化这个类。我正在运行Find_Do_For_Anspress::test_fn()代码>就在类定义之后。这不管用。但是,当我运行Find_Do_For_Anspress::test_fn()时代码>在其中一个包含的文件中,它返回“exists”。我尝试了上面所有的动作钩子来实例化我的类,它们都很有效。为什么?我真的不知道。如果您发现了,请在此处发布。loop\u start
页面在Codex中不存在,因此我不确定是否使用此操作挂钩。请尝试使用wp\u head
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..!';
}
}