2013-06-19 44 views
-2

沒有這樣做,如果沒有條件語句之間的區別:包裝一require_once一個條件語句中和的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文件裏面,那麼所需要的文件中的功能沒有完全工作。但他們部分工作。爲什麼我不能保持條件,如果我只想包含某個頁面的文件?

編輯 - 附加請求信息:
基本上是試圖添加所需的文件中採取以下行動:

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"); 

管理AJAX設置功能完美地運行,它排入兩個JavaScript文件和本地化管理阿賈克斯javasscript訪問。這很好,但我的jQuery Ajax函數返回響應0.而沒有條件語句,我得到了完整的迴應。很明顯,添加條件改變了functions.php與所需文件一起工作的方式。

+1

我不相信這是你的問題足夠的信息讓我們回答這個問題。請添加一些關於功能如何「不能完全工作」的細節。 – tvkanters

+0

當條件存在時,文件可能有條件地被包含或不被包含。這對我們無法說明的腳本的其他部分有什麼影響,因爲我們a)不知道該文件的作用,以及b)「非工作」部分究竟需要什麼。 – deceze

回答

1

這不起作用的原因是因爲你的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_enqueue_script鉤來代替:

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

您說得對,ajax操作沒有被加載,這意味着,無論何時您將程序員定義的函數內的admin ajax文件本地化,都必須在PHP創建$ _SERVER標頭之前包含該函數。我在想$ _SERVER標題是第一個,但我猜不是。 –

相關問題