块编辑器的save()
函数不会将JS函数保存到要在前端运行的数据库中。要在前端运行JS,需要将其另存为单独的文件,并在前端显式将该文件排队。
记住这一点,重写save()
函数,而不是试图直接调用函数,它有一个特定的CSS类,您可以将其作为目标。
save: function (props) {
return wp.element.createElement(
"button",
{style: {padding: \'4px\', border: \'2px solid black\'}, class: \'clicker\'},
"Click On Me"
);
}
然后调整函数并将其保存在自己的
clicker.js
文件:
(function($) {
$(document).ready(function(){
// Add a click handler to just these buttons
$(\'button.clicker\').on(\'click\', clickHandler);
// Define the clickHandler function, as before
function clickHandler(event) {
alert(\'clicked\')
}
});
})(jQuery);
最后,要将单独的JS排队,请编辑PHP文件:
add_action(\'init\', \'wpse_add_front_end_clicker_script\');
function wpse_add_front_end_clicker_script() {
wp_enqueue_script(
\'clicker\',
plugins_url(\'clicker.js\', __FILE__),
array(\'jquery\'),
filemtime( plugin_dir_path( __FILE__ ) . \'clicker.js\' ),
true
);
}
这将使用jQuery依赖项将文件排队,并给它加上时间戳,因此如果您更新JS,它应该避免停留在缓存中。(您可能需要调整上面的一些代码,因为我还没有全部测试过,但这应该会让您走上正确的道路!)