如何在不保存的情况下获取数据库选项格式?

时间:2015-03-21 作者:Benn

使用Unyson 框架我正在将主题选项表单数据保存到文件中。能够通过ajax和

JSON.stringify(form values in json format)
我的问题是,在通过ajax保存表单数据之前,表单数据是经过处理的,例如,我在表单头中看到的选项,

fw_options[logo_image]:368
在数据库中另存为

fw_options[logo_image][attachment_id]:368
fw_options[logo_image][url]:\'the image url\'
因此,我保存的json数组与DB序列化数组不匹配。这只是正在处理的此类选项的示例之一。因此,在将所有表单数据保存到DB之前,都会对其进行处理。如何获取已处理的数据数组?

是的,我可以在将缺少的索引发送到文件之前将其推送到json表单值,但我不想对所有以扩展格式“输出”的选项都这样做。对于任何能做到这一点的新选项,我都必须不断添加。

我想我要做的是“模拟”保存,而不是将数据发送到DB,我需要将其发送到我的文件。

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

正如我提到的here 这两个ajax操作,下面是如何使用第二个操作以db格式提取表单值

创建将返回设置选项的ajax操作

您可以将此代码添加到{theme}/functions.php 或至{theme}/inc/hooks.php

function _action_ajax_fw_theme_get_settings_options() {
    wp_send_json_success(array(
        \'options\' => fw()->theme->get_settings_options()
    ));
}
add_action( \'wp_ajax_fw_theme_get_settings_options\', \'_action_ajax_fw_theme_get_settings_options\' );
打开Theme Settings 分页并在控制台中运行此脚本

var dbSettingsOptions = {
    $form: jQuery(\'.fw-settings-form\'),
    options: null,
    getOptions: function (callback) {
        if (this.options) {
            return callback(this.options);
        }

        jQuery.ajax({
            url: ajaxurl,
            type: \'POST\',
            data: \'action=fw_theme_get_settings_options\',
            dataType: \'json\',
            success: _.bind(function (response, status, xhr) {
                if (!response.success) {
                    alert(\'Ajax error\');
                    return;
                }

                this.options = response.data.options;

                callback(this.options);
            }, this),
            error: function (xhr, status, error) {
                alert(\'Ajax error\');
            }
        });
    },
    getValues: function(callback) {
        if (!this.options) {
            return this.getOptions(_.bind(function(){
                this.getValues(callback);
            }, this));
        }

        jQuery.ajax({
            url: ajaxurl,
            type: \'POST\',
            data: [
                \'action=fw_backend_options_get_values\',
                this.$form.serialize()
                    .replace(/fwf=[^\\&]+\\&/, \'\'), // remove special hidden input value to prevent form save
                \'options=\'+ encodeURIComponent(JSON.stringify(this.options))
            ].join(\'&\'),
            dataType: \'json\',
            success: _.bind(function (response, status, xhr) {
                if (!response.success) {
                    alert(\'Error: \'+ response.data.message);
                    return;
                }

                callback(response.data.values);
            }, this),
            error: function (xhr, status, error) {
                alert(status +\': \'+ error.message);
            }
        });
    }
};

dbSettingsOptions.getValues(function(values){ console.log(values); });

结束

相关推荐

$wpdb->Get_Results内存泄漏

我开发了一个wordpress插件,可以读取大型自定义xml文件,并将信息作为自定义帖子类型和大量帖子元信息导入。所以我调用了很多数据库事务。插件在一个POST\'ed进程内运行几分钟,然后在内存不足(250 MB)的情况下中止。将问题跟踪到最低限度我有一个显示问题的最低限度的示例。这个例子泄漏了大约18 kbyte的数据,这在插件运行时是一个很大的总结。查询检查是否存在具有给定标题的帖子($title)echo \"<p>memory: \" . memory_get_usage() . \