Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将jQuery回退排队-WordPress_Jquery_Html_Wordpress - Fatal编程技术网

如何将jQuery回退排队-WordPress

如何将jQuery回退排队-WordPress,jquery,html,wordpress,Jquery,Html,Wordpress,在一个HTML模板中,我发现下面两行代码正在加载外部脚本。第一个是CDN中非常熟悉的jQuery库,但第二个对我来说很奇怪 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="js/jquery-

在一个HTML模板中,我发现下面两行代码正在加载外部脚本。第一个是CDN中非常熟悉的jQuery库,但第二个对我来说很奇怪

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery-1.9.1.min.js"><\/script>')</script>
但是我想知道,第二个怎么做

所以我的问题有两个:

  • 那一行代码是什么?是否只有CDN失败时才会触发回退
  • 如何排队但硬编码WordPress中的第二行
  • 编辑 在@RobSchmuecker的回答之后,我终于明白了重点。但实际上,由于缺乏寻求正确执行方式的经验,我的代码如下:

    function scripts() {
       wp_enqueue_script( 'jquery-latest', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js' );
       wp_localize_script( 'jquery-fallback', 'styleSheetURL', get_stylesheet_directory_uri() );
       wp_enqueue_script( 'jquery-fallback', get_template_directory_uri() . '/js/jquery-fallback.js', array( 'jquery-latest' ) );
    }
    add_action('wp_enqueue_scripts', 'scripts');
    
    我以您的方式设置了
    jquery fallback.js
    仅使用以下行:

    window.jQuery || document.write('<script src="' + styleSheetURL + '/js/jquery-1.11.1.min.js"><\/script>');
    
    但是我无法从本地服务器加载jQuery

    编辑2 HTML输出似乎是正确的。我从浏览器中推测了
    jquery fallback.js
    文件,它显示了前面提到的确切文件。但是我将路径更改为
    styleSheetURL+'/jquery-1.11.1.min.js

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js?ver=3.9.1"></script>
    <script type="text/javascript" src="http://localhost/PROJECTDIRECTORY/wp-content/themes/MYTHEME/js/jquery-fallback.js?ver=3.9.1"></script>
    
    
    

    但控制台仍然表示至少有4个依赖jQuery调用被错过。

    是的,如果CDN不工作,它看起来肯定是一个
    回退

    为了让它可靠地工作,我将制作一个包含以下内容的JS文件:

    window.jQuery || document.write('<script src="js/jquery-1.9.1.min.js"><\/script>');
    
    这意味着您将把fallback.js更改为

    window.jQuery || document.write('<script src="' + styleSheetURL + 'js/jquery-1.9.1.min.js"><\/script>');
    
    window.jQuery | | document.write(“”);
    
    是的,在CDN不工作的情况下,它看起来确实是一个
    回退

    为了让它可靠地工作,我将制作一个包含以下内容的JS文件:

    window.jQuery || document.write('<script src="js/jquery-1.9.1.min.js"><\/script>');
    
    这意味着您将把fallback.js更改为

    window.jQuery || document.write('<script src="' + styleSheetURL + 'js/jquery-1.9.1.min.js"><\/script>');
    
    window.jQuery | | document.write(“”);
    
    根据Wordpress文档,“使用JavaScript变量的数据对注册的脚本进行本地化”。必须首先注册fallback.js脚本。Rob Schmuecker让我得到了90%的支持,但在我先注册脚本,然后本地化filePathURL,然后将回退排队之前,回退并没有起作用

    此外,没有理由创建依赖项,因为这会导致回退脚本也无法加载。这是我的最终代码:

    fallback.js

        window.jQuery || document.write('<script src="' + filePathURL + '\/js/vendor/jquery-1.11.2.min.js"><\/script>');
    

    很好

    根据Wordpress文档,“使用JavaScript变量的数据对注册的脚本进行本地化。”必须首先注册fallback.js脚本。Rob Schmuecker让我得到了90%的支持,但在我先注册脚本,然后本地化filePathURL,然后将回退排队之前,回退并没有起作用

    此外,没有理由创建依赖项,因为这会导致回退脚本也无法加载。这是我的最终代码:

    fallback.js

        window.jQuery || document.write('<script src="' + filePathURL + '\/js/vendor/jquery-1.11.2.min.js"><\/script>');
    

    很好

    除了问题的第一次编辑之外,我建议将排队脚本的CDN版本称为“jquery CDN”或“jquery latest”或类似版本,并将回退版本称为“jquery”。这样,就不需要更改其他排队,并且依赖项的顺序可以确保无论何时需要“jquery”,CDN版本和回退都可以排队

    此外,呼叫顺序将不起作用,因为根据:

    重要!wp_localize_script()必须在脚本运行后调用 已使用wp_register_script()或wp_enqueue_script()注册

    最后一个函数如下所示:

    function scripts() {
       wp_enqueue_script( 'jquery-latest', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js' );
       wp_enqueue_script( 'jquery', get_template_directory_uri() . '/js/jquery-fallback.js', array( 'jquery-latest' ) );
       wp_localize_script( 'jquery', 'styleSheetURL', get_stylesheet_directory_uri() );
    }
    add_action('wp_enqueue_scripts', 'scripts');
    

    除了问题的第一次编辑之外,我建议将排队脚本的CDN版本称为“jQueryCDN”或“jQueryLatest”或类似版本,将回退版本称为“jquery”。这样,就不需要更改其他排队,并且依赖项的顺序可以确保无论何时需要“jquery”,CDN版本和回退都可以排队

    此外,呼叫顺序将不起作用,因为根据:

    重要!wp_localize_script()必须在脚本运行后调用 已使用wp_register_script()或wp_enqueue_script()注册

    最后一个函数如下所示:

    function scripts() {
       wp_enqueue_script( 'jquery-latest', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js' );
       wp_enqueue_script( 'jquery', get_template_directory_uri() . '/js/jquery-fallback.js', array( 'jquery-latest' ) );
       wp_localize_script( 'jquery', 'styleSheetURL', get_stylesheet_directory_uri() );
    }
    add_action('wp_enqueue_scripts', 'scripts');
    

    从4.5开始,您可以使用一个新功能,请参阅我在wordpress.stackexchange上的详细回答

    简短版本:

    您可以使用,它将js脚本附加到排队的脚本中,不询问任何问题,也不检查任何代码问题(有一个包装函数,它进行检查,但不允许
    标记,甚至不允许编码)

    这是一个有效的例子

    function _enqueue_my_scripts() {
      // the normal enqueue
      wp_enqueue_script( 'jquery-cdn', 'https://code.jquery.com/jquery-3.3.1.min.js' );
      // our custom code which will check for the existance of jQuery (in this case)
      wp_scripts()->add_inline_script( 'jquery-cdn',
        "window.jQuery || document.write('<script src=\"".get_template_directory_uri() ."/js/jQuery.js\">\\x3C/script>')", 'after');
    }
    add_action('wp_enqueue_scripts', '_enqueue_my_scripts', 100);
    
    function\u enqueue\u my\u scripts(){
    //正常排队
    wp_排队_脚本('jquery cdn','https://code.jquery.com/jquery-3.3.1.min.js' );
    //我们的自定义代码将检查jQuery是否存在(在本例中)
    wp_scripts()->添加_内联_脚本('jquery cdn',
    “window.jQuery | | document.write('\\x3C/script>')”,“after”);
    }
    添加操作(“wp\u排队脚本”,“排队我的脚本”,100);
    
    这会给你

    <script type='text/javascript' src='https://code.jquery.com/jquery-3.3.1.min.js'></script>
    <script type='text/javascript'>
    window.Swiper || document.write('<script src="http://localhost/wordpress/wp-content/themes/wp-theme/js/jQuery.js">\x3C/script>')
    </script>
    
    
    window.Swiper | | document.write(“\x3C/script>”)
    
    在你的HTML中


    根据需要替换“window.jQuery”和“/js/jQuery.js”,但不要触摸行的其余部分,因为这意味着要将正确的行传递到HTML。

    从4.5开始,您可以使用一个新函数,请参阅我在wordpress.stackexchange上的详细答案

    简短版本:

    您可以使用,它将js脚本附加到排队的脚本中,不询问任何问题,也不检查任何代码问题(有一个包装函数,它进行检查,但不允许
    标记,甚至不允许编码)

    这是一个有效的例子

    function _enqueue_my_scripts() {
      // the normal enqueue
      wp_enqueue_script( 'jquery-cdn', 'https://code.jquery.com/jquery-3.3.1.min.js' );
      // our custom code which will check for the existance of jQuery (in this case)
      wp_scripts()->add_inline_script( 'jquery-cdn',
        "window.jQuery || document.write('<script src=\"".get_template_directory_uri() ."/js/jQuery.js\">\\x3C/script>')", 'after');
    }
    add_action('wp_enqueue_scripts', '_enqueue_my_scripts', 100);
    
    function\u enqueue\u my\u scripts(){
    //正常排队
    wp_排队_脚本('jquery cdn','https://code.jquery.com/jquery-3.3.1.min.js' );
    //我们的自定义代码将检查jQuery是否存在(在本例中)
    wp_scripts()->添加_内联_脚本('jquery cdn',
    “window.jQuery | | document.write('\\x3C/script>')”,“after”);
    }
    添加操作('wp\U排队\U脚本','\U enq