Я пытаюсь условно загрузить свой интерфейсный код и код области администрирования в плагине WordPress, поэтому файл и класс, создающий область администратора, будут загружаться на стороне администратора, а файл и класс, которые необходимо запустить на фронте, -. end будет работать только на front-end и ничего не трогает в админке.
Я пытался использовать условное is_admin()
:
if (!is_admin()) {
require_once(plugin_dir_path(dirname(__FILE__)) . 'public/class-public.php');
$this->Public = new Public();
} else {
require_once(plugin_dir_path(dirname(__FILE__)) . 'admin/class-admin.php');
$this->Admin = new Admin();
}
загрузка кода прошла нормально, но AJAX не работал на стороне c, так как AJAX запросы привязаны к Действия wp_ajax_
или wp_ajax_nopriv_
выполняются в контексте WP Admin. Поэтому я решил создать свою собственную функцию isAdmin()
:
public static function isAdmin() {
$currentUrl = set_url_scheme(
sprintf(
'http://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
)
);
$adminUrl = strtolower(admin_url());
$referrer = strtolower(wp_get_referer());
if (strpos($currentUrl, $adminUrl) === 0) {
if (strpos($referrer, $adminUrl) === 0) {
return true;
} else {
if (function_exists('wp_doing_ajax')) {
return !wp_doing_ajax();
} else {
return !(defined('DOING_AJAX') && DOING_AJAX);
}
}
} else {
if (!defined('REST_REQUEST') || !REST_REQUEST) {
return false;
}
return (isset($_REQUEST['context']) && $_REQUEST['context'] === 'edit');
}
}
загрузка кода была все еще в порядке, но теперь AJAX работал на стороне publi c и не работал на стороне администратора.
Итак, как я могу предотвратить загрузку открытого кода c в код области администратора и наоборот, если AJAX работает с обеих сторон?