在主题中使用插件中的Java脚本回调

时间:2017-05-10 作者:bluantinoo

我肯定错过了一些基础知识。

我在用这个plugin wich执行ajax操作,然后启动js函数作为回调。我想在我的主题的自定义js脚本中使用回调。

回调函数已经在主插件js的开头定义(但为空),然后作为$的回调被激发。将值放入其变量中的ajax帖子。

这是插件js的简化版本

jQuery(document).ready(function(){
    new Favorites;
});

// Callback Function for use in themes
function favorites_after_button_submit(favorites, post_id, site_id, status){}

var Favorites = function()
{


    var plugin = this;
    var $ = jQuery;

    // Initialization
    plugin.init = function(){
        plugin.bindEvents();
        plugin.generateNonce();
    }

    $.ajax({
            url: plugin.ajaxurl,
            type: \'post\',
            datatype: \'json\',
            data: {
                action : plugin.formactions.favorite,
                nonce : plugin.nonce,
                postid : post_id,
                siteid : site_id,
                status : status
            },
            success: function(data){
                plugin.doStuff();
                favorites_after_button_submit(data.favorites, post_id, site_id, status);
            }
        });

    return plugin.init();   
}
如您所见,函数favorites_after_button_submit(){} 定义但不执行任何操作。

乍一看,我将从那里删除该函数,并在我的主题中使用它。但我肯定这不是解决问题的办法。

那么,我如何拦截作为回调调用的函数,从另一个js函数中获取其数据,并使用它执行一些操作呢?

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

好吧,我发现了here 如何处理。

这太简单了,我简直不敢相信:

1) 在主题中包含一个自定义脚本,该脚本依赖于最喜爱的插件。示例:

wp_enqueue_script(\'script\', get_stylesheet_directory_uri() . \'/js/myscript.js\', \'simple-favorite\', \'1.0.0\', true);
2)在myscript中。js只需再次定义函数,并使其执行以下操作:

function favorites_after_button_submit(favorites, post_id, site_id, status){
    console.log(\'done\');
}
看来js函数可以重新定义了?

SO网友:Mark Kaplun

这更多的是JS问题,而不是WP问题,但一般来说,您显示的代码很糟糕。JS中有各种各样的回调方法,最明显的方法是在相关JS代码的初始化中将其作为参数传递。这段代码是不可扩展的,如果这是您的需求,那么您只需将JS分叉并将自己的代码排队,但显然这种策略不利于可维护性。

最好的选择可能是寻找更好的插件,或者编写自己的插件(您有一个代码可以从中获得灵感,并删减不需要的部分)

结束