调用未定义的函数Add_action()

时间:2013-03-15 作者:Ionut

我创建了一个主题选项页面,用户可以在其中编辑一些主题设置。现在我尝试异步保存此选项,但似乎在将处理程序文件集成到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功能,但我不知道如何修复它。

谢谢

1 个回复
最合适的回答,由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\')));

结束