是否可以在同一函数内的入队后添加JS?

时间:2020-04-16 作者:SyberKnight

我在子主题的函数中添加了一个函数。只能在特定页面上工作的php文件。

我可以成功地将第三方jquery脚本排队。

我可以成功地添加自己的jquery/js。

但我想知道是否可以在同一个函数包装器中添加这两个东西。

下面是添加外部脚本的部分:

function custom_thing () {
    if(is_page( 2138 )){
        wp_enqueue_script(\'external-script\',  \'http://domain.com/external/script.js\', array(\'jquery\'), 0, true);
}}
add_action( \'wp_enqueue_scripts\', \'custom_thing\' );
下面是外部脚本所需的额外代码:

function custom_thing_addition () {
    if(is_page( 2138 )){
    ?>
        <script>
            jQuery(document).ready(function($) {
                $("div.specific").on(\'click\', \'div.thing1\', function () {
                    //do somethiing
                });
            });
        </script>
    <?php
}}
add_action( \'wp_footer\', \'custom_thing_addition\' );
我可以合并这些吗?也许是这样的(虽然这不起作用)。。。

function custom_thing () {
    if(is_page( 2138 )){
        wp_enqueue_script(\'external-script\',  \'http://domain.com/external/script.js\', array(\'jquery\'), 0, true);
    ?>
        <script>
            jQuery(document).ready(function($) {
                $("div.specific").on(\'click\', \'div.thing1\', function () {
                    //do somethiing
                });
            });
        </script>
    <?php
}}
add_action( \'wp_enqueue_scripts\', \'custom_thing\' );
谢谢。

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

这个wp_add_inline_script() 设计用于此目的。它允许您在排队脚本的上方或下方添加一些内联JavaScript。您只需传递脚本的内容,而不传递<script> 标签:

function custom_thing () {
    if ( is_page( 2138 ) ) {
        wp_enqueue_script( \'external-script\', \'http://domain.com/external/script.js\', array( \'jquery\' ), 0, true );
        wp_add_inline_script(
            \'external-script\',
            \'jQuery( document ).ready( function( $ ) {
                $( "div.specific" ).on( "click", "div.thing", function () {
                    //do somethiing
                } );
            } );\',
            \'after\'
        );
    );
}
add_action( \'wp_enqueue_scripts\', \'custom_thing\' );
JavaScript本身是作为字符串传递的,所以请注意引号。如果脚本足够长以至于变得很难处理,那么最好将JavaScript放在自己的文件中,并将外部脚本设置为依赖项:

function custom_thing() {
    if ( is_page( 2138 ) ) {
        wp_enqueue_script( \'external-script\',  \'http://domain.com/external/script.js\', array( \'jquery\' ), 0, true );
        wp_enqueue_script( \'custom-script\',  get_theme_file_uri( \'path/to/custom-script.js\' ), array( \'jquery\', \'external-script\' ), 0, true );
    }
}
add_action( \'wp_enqueue_scripts\', \'custom_thing\' );

SO网友:Tony Djukic

要做到这一点并让事情变得更简单,正确的方法是将辅助代码放入它自己的文件中。我们叫它吧custom_thing.js 让我们把它放在主子主题文件夹中:

那么您只需执行以下操作:

function custom_thing() {
    if( is_page( 2138 ) ) {
        wp_enqueue_script( \'external-script\',  \'http://domain.com/external/script.js\', array( \'jquery\' ), 0, true );
        wp_enqueue_script( \'custom_thing-script\',  get_stylesheet_directory_uri() . \'/custom_thing.js\', array( \'jquery\' ), 0, true );
    }
}
add_action( \'wp_enqueue_scripts\', \'custom_thing\' );
有时,如果我在主题中包含的代码库/jQuery插件是我可以在本地托管的,而不是CDN,那么我只需将我的实例化JS附加到代码库文件的底部,这样我就可以包含更少的脚本。然而,如果我使用的是CDN托管库,我会这样做。

Edited

正如Jacob Pettie在评论中指出的那样,我忘记了调用子主题目录的正确函数,而是试图包含父主题中不存在的JS。已编辑要使用的答案get_stylesheet_directory_uri() 相反

相关推荐