在条件语句中包装require_once与在functions.php中不这样做的区别


The difference between wrapping a require_once inside a conditional statement and not doing so in functions.php

不带条件语句:

require_once( dirname( __FILE__ ) . "/edit_info_check_password.php" );

工作好。但是只要加上:

if(  substr($_SERVER["REQUEST_URI"], 18, 13) == "edit-userinfo" )
require_once( dirname( __FILE__ ) . "/edit_info_check_password.php" );

在functions.php文件中,则所需文件中的函数不能完全工作。但它们部分起作用。如果我只想包含某个页面的文件,为什么不能保留条件?

EDIT -附加信息:
基本上尝试在所需的文件中添加以下操作:

add_action( 'wp_enqueue_scripts', 'admin_ajax_setup' );
add_action( 'wp_ajax_ajax-checkpasswords', 'check_info_passwords' );
add_action("wp_ajax_nopriv_ajax-checkpasswords", "check_info_passwords");

admin ajax设置函数运行完美,它将两个javascript文件排队,并将admin ajax本地化以供javascript访问。这很好,但我的jquery ajax函数返回响应0。而没有条件语句,我得到了完整的响应。显然,添加条件会改变functions.php处理所需文件的方式。

这不起作用的原因是ajax管理钩子没有被调用。

ajax钩子没有被调用的原因是因为它们没有在"edit-userinfo"页面被调用。这些ajax调用在不同的页面上处理。你的需求只会在"edit-userinfo"页面加载。

我的最佳解决方案是将ajax钩子包装在init钩子中,并添加is_admin条件检查。

这意味着您需要包含没有条件的文件。如果每次都包含这个文件,我不认为性能应该是一个问题。

你这样设置你的文件:

if(  substr($_SERVER["REQUEST_URI"], 18, 13) == "edit-userinfo" )
    add_action( 'wp_enqueue_scripts', 'admin_ajax_setup' );
function init_admin_ajax_hooks()
{
    if (is_admin()) {
        add_action( 'wp_ajax_ajax-checkpasswords', 'check_info_passwords' );
        add_action("wp_ajax_nopriv_ajax-checkpasswords", "check_info_passwords");
    }
}
add_action('init', 'init_admin_ajax_hooks');

我离开你的队列脚本挂钩,因为我不确定它是否在管理或不。

如果它在admin中,你应该使用admin_enqueue_script钩子代替:

if(  substr($_SERVER["REQUEST_URI"], 18, 13) == "edit-userinfo" )
    add_action( 'admin_enqueue_scripts', 'admin_ajax_setup' );