我创建了一个主题选项页面,用户可以在其中编辑一些主题设置。现在我尝试异步保存此选项,但似乎在将处理程序文件集成到WP中时遇到了一些问题。
主题选项是嵌套在外观下的简单管理页面。
按下保存按钮时:
<a id = "save-settings" href = "#" data-nonce = "<?php wp_create_nonce("sace_settings_nonce") ?>"><?php echo _(\'Save Settings\') ?></a>
调用以下JS脚本:
function(){
jQuery.ajax({
type : \'POST\',
url : themeRoot + \'framework/AsyncAction.php\',
data: { action : \'save_settings\',
name : \'John\',}
}).done(function(resp) {
alert(resp);
});
},
处理程序
.php
文件包含:
<?php
include_once(\'SettingsController.php\');
define (\'SAVE_SETTINGS\', \'save_settings\');
add_action(\'wp_ajax_save_settings\', \'save_settings\');
function save_settings(){
global $controller;
$name = esc_attr($_POST[\'name\']);
echo \'Hi, \' . $name;
}
?>
运行此代码会引发以下错误:
Fatal error: Call to undefined function add_action()
我还尝试:
钩住init上的操作->相同的问题将钩子完全移除。这导致引发的未定义错误esc_attr()
我似乎无法访问任何WP功能,但我不知道如何修复它。
谢谢
最合适的回答,由SO网友:David Gard 整理而成
Wordpress有一个本机AJAX文件,可以完成您想要的一切,这将确保包含所有本机WP函数。如果您需要其他功能\'framework/AsyncAction.php\', 你可以include_once()
, 就像你所做的那样\'SettingsController.php\'.
有关更多信息和示例,请参见法典-AJAX in Plugins
如果希望在网站前端使用AJAX,需要在functions.php 文件-
/** Declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php) */
wp_enqueue_script(\'my-ajax-request\', admin_url(\'admin-ajax.php\'), array(\'jquery\'));
wp_localize_script(\'my-ajax-request\', \'MyAjax\', array(\'ajaxurl\' => admin_url(\'admin-ajax.php\')));