2016-11-30 60 views
1

我正在開發一個WordPress插件,其中插件的主要文件包括一個PHP文件,取決於(至少應該),如果你是後端或前端。is_admin()和DOING_AJAX在WordPress插件

由於is_admin()上的AJAX請求返回true,我已經使用了DOING_AJAX不斷檢查whetever AJAX完成與否:

if (is_admin() && (! defined('DOING_AJAX') || ! DOING_AJAX)) { 
    require_once('admin/functions_admin.php'); 
} 
else { 
    require_once('public/functions_public.php'); 
} 

正確的文件在可溼性粉劑管理員加載。正確的文件加載前端。 Ajax請求工作在前端 - ,但不是後端。使用此代碼執行Ajax後端時,不會執行「if」。

當添加下面的「否則,如果」代碼它的工作原理後端,但後來當然不是頭端:

else if (is_admin()) { 
    require_once('admin/functions_admin.php'); 
} 

回答

-1

通過收集所有的AJAX功能(包括前端和後端排序了這一點在第三個文件中:

// Is admin, but not doing ajaax 
if (is_admin() && (! defined('DOING_AJAX') || ! DOING_AJAX)) { 
    require_once('admin/functions_admin.php'); 
} 
// Is doing AJAX 
else if (is_admin() && (defined('DOING_AJAX') || DOING_AJAX)) { 
    require_once('functions_ajax.php'); 
} 
// Front-end functions 
else { 
require_once('public/functions_public.php'); 
} 
+0

這是一個可怕的技術,它看起來像你避免了在插件中,管理員使用AJAX WordPress的準則(和助手)。請閱讀... https://codex.wordpress.org/AJAX_in_Plugins –

4

在插件codex頁面的Ajax中有關於這個事實的說明。

由於掛鉤使用wp-admin/admin-ajax.php您必須避免使用is_admin(),它將始終返回true。

一個例子,你想只包括前端的文件,你!is_admin()檢查,你有wp_ajax_{$action}的文件中,但管理員-ajax.php將始終返回true,響應將是0

法典說的是什麼;

前端和後端Ajax請求都使用admin-ajax.php,所以is_admin()將始終在您的動作處理代碼中返回true。

有選擇地爲前端和後端加載Ajax腳本處理程序,並使用is_admin()函數時,您的wp_ajax_(action)和wp_ajax_nopriv_(action)掛鉤必須位於is_admin()===真正的部分。

所以,如果你的問題是:我怎麼能讓我的腳本工作?

刪除is_admin()並用另一個條件替換它。

來源Ajax in plugin

希望它可以幫助