类中的AJAX保存选项

时间:2016-09-07 作者:dingo_d

我正在用面向对象的方法创建一个主题选项页面。此对象的每个新实例都是一个单独的子页面。渲染和所有选项都很好(仍在进行中,但简而言之,效果很好),除了AJAX保存。

我已将__construct 方法此

public function __construct( $subpage_name, $html_array ) {
    $this->subpage_name = $subpage_name;
    $this->html_array   = $html_array;
    add_action( \'admin_menu\', array( $this, \'create_submenu_pages\' ) );
    add_action( \'wp_ajax_settings_save\', array( $this, \'all_settings_save\' ) );
}
我有一个方法

public function all_settings_save() {
    if ( isset( $_POST[\'data\'], $_POST[\'settings_nonce\'] ) && wp_verify_nonce( sanitize_key( $_POST[\'settings_nonce\'] ), \'settings_nonce_action\' ) && \'\' !== $_POST[\'data\'] ) { // Input var okay.
        $settings = json_decode( sanitize_text_field( wp_unslash( $_POST[\'data\'] ) ) ); // Input var okay.
        update_option( str_replace( \' \', \'_\', strtolower( $this->subpage_name ) ), $settings );
    }
    wp_die();
}
当我单击save按钮时,我的ajax可以工作,因为我可以在inspector中看到数据(网络选项卡,然后是admin ajax.php),例如,它显示表单数据是:

action:settings_save
data:{
  "settings": {
    "header_title": "Testing",
    "logo": "",
    "retina_logo": "",
    "retina_logo_width": "23",
    "retina_logo_height": "",
    "transparent_logo": "",
    "transparent_retina_logo": "",
    "transparent_retina_logo_width": "",
    "transparent_retina_logo_height": "",
    "background_image": ""
  }
}
settings_nonce:b7778588e3
所以这应该存储在我的数据库中,如果是“标题设置”页面,那么header_settings my中的选项wp_options 桌子但当我重新加载页面时,不会插入任何内容,因为我没有调用任何行header_settings 存在于wp_options 桌子

我以为验证检查失败了,所以我删除了它们,但我还是什么都没有得到。

我做错了什么?

1 个回复
最合适的回答,由SO网友:dingo_d 整理而成

找到问题。首先我添加了

ini_set(\'log_errors\',TRUE);
ini_set(\'error_reporting\', E_ALL);
ini_set(\'error_log\', dirname(__FILE__) . \'/error_log.txt\');
沿着

define(\'WP_DEBUG\', TRUE);
在我的wp-config.php, 这会将错误、通知和警告写入error_log.txt 在根文件夹中(我不知道为什么我一开始没有想到这一点)。

然后我看到了错误-我使用json_decode 而不是wp_json_encode 将我的设置编码为字符串,然后再将其存储到我的选项中。

有一个奇怪的问题,名字不属于子页面,但我现在就来讨论这个问题。

感谢死亡医生建议error_message() 找出代码是否有效的方法。这将有助于将来进行任何AJAX调试。

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i