问题描述

我知道我可以添加脚本文件到 wordpress 的脚注,这需要使用这个代码的 jquery:

<?php
function my_scripts_method() {
   // register your script location, dependencies and version
   wp_register_script('custom_script',
       get_template_directory_uri() . '/js/custom_script.js',
       array('jquery'),
       '1.0',
       true);
   // enqueue the script
   wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

但是,如果我只想添加一个正常的 jquery 内联代码,而不是一个文件,该怎么办?如何才能做到这一点。

Edit

我知道我可以使用这个脚本向页脚添加一些东西:

<?php
function myscript() {
?>
<script type="text/javascript">
 // This depends on jquery
</script>
<?php
}
add_action('wp_footer', 'myscript');

但是如何指定需要 jquery 运行的脚本。

最佳解决方案

实现此操作的最简单方法实际上是 wp_enqueue_script 和 Saif 和 v0idless 已引用的脚注操作的组合。我经常在我的主题和插件中使用 jQuery,但是我也将所有其他脚本放在页脚中。

实际排队的最好办法是这样做:

function myscript() {
?>
<script type="text/javascript">
  if ( undefined !== window.jQuery ) {
    // script dependent on jQuery
  }
</script>
<?php
}
add_action( 'wp_footer', 'myscript' );

function myscript_jquery() {
    wp_enqueue_script( 'jquery' );
}
add_action( 'wp_head' , 'myscript_jquery' );

但是,这段代码假定您是排队脚本的代码,即您在自己的插件或主题中执行此操作。

目前,没有办法将 in-line 脚本添加到 WordPress 页脚,并且还可以使用依赖关系加载它。但是,如果你愿意,还有一个选择。

替代方案

当 WordPress 使用脚本时,它将内部加载到对象以跟踪它们。对象中基本上有 3 个列表:

  • 注册

  • 队列

  • DONE

  • 去做

当您首次使用 wp_register_scripts()注册脚本时,它将被放置在注册列表中。当你 wp_enqueue_script()的脚本时,它被复制到队列列表中。在打印到页面之后,它被添加到完成列表中。

所以,而不是排序您的脚注脚本来要求 jQuery,您可以记录它需要使用 jQuery,并且只需检查程序来确保 jQuery 被加载。

这使用 wp_script_is()来检查脚本在哪里列出。

function myscript() {
    if( wp_script_is( 'jquery', 'done' ) ) {
    ?>
    <script type="text/javascript">
      // script dependent on jQuery
    </script>
    <?php
    }
}
add_action( 'wp_footer', 'myscript' );

你也许可以使用相同的代码强制 jQuery 加载在页脚中,但是我没有测试过,所以你的里程我的不同。

次佳解决方案

由于 wordpress 4.5,您可以通过 wp_add_inline_script()添加内联脚本。要将 JavaScript 代码片段添加到需要 jQuery 的页脚,此代码可以帮助您

function enqueue_jquery_in_footer( &$scripts ) {

    if ( ! is_admin() )
        $scripts->add_data( 'jquery', 'group', 1 );
}
add_action( 'wp_default_scripts', 'enqueue_jquery_in_footer' );

function theme_prefix_enqueue_script() {
   if(!wp_script_is('jquery', 'done')) {
     wp_enqueue_script('jquery');
   }
   wp_add_inline_script( 'jquery-migrate', 'jQuery(document).ready(function(){});' );
}
add_action( 'wp_enqueue_scripts', 'theme_prefix_enqueue_script' );

wp_add_inline_script with wordpress jquery

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。