将require_once包装在条件语句中而不是在functions.php中执行此操作之间的区别

时间:2013-06-19 10:28:05

标签: php wordpress require-once

没有条件陈述:

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文件中,然后所需文件中的函数不能完全运行。但他们部分工作。如果我只想包含某个页面的文件,为什么我不能保持这个条件?

编辑 - 其他要求的信息:
基本上尝试在所需文件中添加以下操作:

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文件排入队列并将管理员ajax本地化为javasscript访问。这很好,但我的jquery ajax函数返回响应0.而没有条件语句,我得到完整的响应。显然,添加条件会改变functions.php处理所需文件的方式。

1 个答案:

答案 0 :(得分:1)

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

未调用ajax挂钩的原因是因为它们未在“edit-userinfo”页面中调用。那些ajax调用是在不同的页面处理的。您的要求只会加载到“edit-userinfo”页面。

我的最佳解决方案是在init挂钩中包装ajax挂钩并添加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');

我保留了你的enqueue脚本钩子,因为我不确定它是否在管理员中。

如果是在管理员中,则应使用admin_enqueue_script挂钩:

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