如何在wp_enQueue_script上消除包含争用条件

时间:2019-08-08 作者:TheoM

我不想成为一个lazy dev. 因此,我只想在需要的地方包含我的js文件。

由于在使用我的短代码的任何地方都需要js,所以我试着去做回答here.

i、 e.:

js公司

function do_cool_stuff(){
    //do the most awesomest of stuff
    //..ok mostly changes textvalues dynamically
}
php

function enqueueAllMyStuff(){
    \\wp_enqueue_script(\'my_stuff\',path_to_my_stuff);
    \\wp_localize_script(\'my_stuff\',\'jabba_the_slug\',[\'url\'=>\\admin_url(\'admin-ajax.php\')];
//...
}
\\add_shortcode(\'goodName\',__NAMESPACE__.\'\\\\my_shortcode\')
function my_shortcode(){
    enqueueAllMyStuff();
    return \'<script>do_cool_stuff()</script>\';
}
但这并不奏效。因为“do\\u cool\\u stuff is not defined”。已尝试执行

return \'<img src="\'.admin_url().\'/images/loading.gif" onload="do_cool_stuff()"/>\';
这种方法有时效果很好。暗示这是一个种族条件。

function my_shortcode(){
    \\add_action(\'wp_enqueue_scripts\',__NAMESPACE__.\'\\\\enqueueAllMYStuff\');
    return \'<script>do_cool_stuff()</script>\';
}
也不起作用,因为标头已发送。

所以应该有更好的方法来做到这一点。

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

如果你跑步wp_enqueue_script() 在一个短代码中,这基本上就是您通过调用enqueueAllMyStuff(), 脚本将排队以加载到页脚中。因此,如果您的短代码在打印后立即运行脚本,则它所依赖的JavaScript文件将不可用,并将导致此错误。

最简单的解决方案是更新脚本,等待加载文档。使用jQueryjQuery( document ).ready(), 但在vanilla JS中,您可以使用:

<script>
    window.addEventListener( \'DOMContentLoaded\', function() {
        do_cool_stuff();
    } );
</script>

相关推荐

插件管理页面AJAX-管理调用返回0,URL设置正确。实现了本地化脚本,但没有修复它

我正在尝试提交一个Ajax调用,将所选图像的源URL从WordPress媒体库传输到我的插件设置页面中的PHP。单击“保存”后,我经常会遇到“错误,错误请求”。尝试调用我的AJAX URL时的状态400。我的AJAX URL当前是domain/wp-admin/admin-AJAX。确实存在的php。我曾尝试设置AJAX调用应该期望的多种数据类型,但我遇到了相同的错误。如果在javascript中删除AJAX调用的URL部分,它确实会导致success函数,但success的参数“response”由页面