Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Wordpress:为什么可以';在初始化init上的主类后,我使用的是用户登录的吗?_Php_Wordpress_Class_Init - Fatal编程技术网

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..!';
    }

}