将数据从块编辑器保存到数据库

时间:2020-08-11 作者:Harry Tuttles

我正在开发wordpress插件,并希望将块中输入的数据保存到mySQL表中。就是这样。但是,如何将数据从块编辑器发送到服务器端呢?我花了两周的时间寻找合适的技巧,但毫无乐趣。

场景很简单:

    registerBlockType("bla/quote-block", {   //...
        attributes: { quoteAtt: { type: \'string\' } },
        edit: function(props) {
            props.setAttributes( { quoteAtt: getQuote() } );
            // ?? Send props.quoteAtt to the server ??
        }

我发现了如何使用AJAX+jQuery+wp_localize_script 但这种方法显然只适用于从前端发送数据(例如表单数据)。RESTAPI极其复杂,所有文档都是关于读取post[元数据]数据的,而不是关于将数据保存到表中。

非常感谢。

1 个回复
SO网友:Harry Tuttles

我发现了一个使用Ajax和本机Javascript的解决方案,如下所示:

// Filename send2server.js
const sendToServer = function() {
   /* Prepare the object to be sent: ********************************************************************/
   var params = new FormData();
   params.append(\'action\',   \'update_sql\');                // update_sql is implemented in PHP (see below)
   params.append(\'quoteAtt\', props.attributes.quoteAtt);   // The actual data

   /* Create the Ajax connection object: ****************************************************************/
   var request = new XMLHttpRequest();
   request.open(\'POST\', ajax_object.ajax_url, true);       // ajax_object.ajax_url defined in PHP (below)
   request.send(params);                                   // Send request to server
}
在服务器端,以下函数以以下方式接收请求:

// File plugin.php
function load_ajax_script() {
    wp_enqueue_script(
        \'send2server\',
        plugins_url( \'send2server.js\', __FILE__ ),
        array(),
        filemtime( plugin_dir_path( __FILE__ ) . \'send2server.js\' )
    );

    wp_localize_script(                                // make ajaxurl available to Javascript
        \'send2server\', 
        \'ajax_object\', 
        array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) 
    );  
}
add_action(\'init\', \'load_ajax_script\');


function update_sql() {                                // Invoked by request.send()
    $received = $_POST["quoteAtt"];                    // Contents of quoteAtt
    // ...
}
add_action(\'wp_ajax_update_sql\', \'update_sql\');        // \'update_sql\' matches the \'action\' in params
这是最好的解决方案吗?我不知道,但它起作用了。

相关推荐

$wpdb selects wrong database

我在另一个WordPress网站的文件夹中创建了一个新的WordPress网站。示例-主站点。com-mainsite。com/第二站点我创建了一个插件,并使用$wpdb 将数据插入数据库,插件将数据插入第一个/父站点的数据库。我使用的代码包括$wpdb 如下所示:$path = $_SERVER[\'DOCUMENT_ROOT\']; include $path . \'/wp-load.php\'; include $path . \'/wp-config.php\'; inc