为什么要为 wp_enqueue_scripts 插入 wp_head()?

Web*_*per 3 javascript css wordpress

我已将此代码添加到 functions.php 但 startwordpress_scripts() 函数没有运行。

function startwordpress_scripts() {
    wp_enqueue_style( 'bootstrap', get_template_directory_uri() . '/css/bootstrap.min.css', array(), '3.3.6' );
    wp_enqueue_style( 'blog', get_template_directory_uri() . '/css/blog.css' );
    wp_enqueue_script( 'bootstrap', get_template_directory_uri() . '/js/bootstrap.min.js', array('jquery'), '3.3.6', true );
}

add_action( 'wp_enqueue_scripts', 'startwordpress_scripts' );
Run Code Online (Sandbox Code Playgroud)

所以我在 header.php 中添加了以下代码,它们运行良好。

<?php wp_head(); ?>
Run Code Online (Sandbox Code Playgroud)

现在我想知道 wp_head() 函数的神奇作用。谢谢。

RRi*_*esh 6

在 WordPress 中,actionsfilters被视为hooks。Hooks 允许我们修改 WordPress 默认行为,而无需修改核心中的代码。

只要有add_action('xxx', 'callback')callback就会在do_action('xxx')执行时调用该函数。

换句话说:当您拥有 时add_action( 'wp_enqueue_scripts', 'startwordpress_scripts' );,就意味着 WordPress 将startwordpress_scripts()do_action('wp_enqueue_scripts')执行时运行。

现在,让我们看看 WordPress 核心中的代码。

如果你看它的函数定义,wp_head()是一个“捷径”do_action( 'wp_head' );

function wp_head() {
        /**
         * Print scripts or data in the head tag on the front end.
         *
         * @since 1.5.0
         */
        do_action( 'wp_head' );
}
Run Code Online (Sandbox Code Playgroud)

换句话说,wp_head()将执行所有用 定义的回调add_action('wp_head')

如果您现在查看该wp-includes/default-filters.php文件,您将看到:

add_action( 'wp_head', 'wp_enqueue_scripts',1 );
Run Code Online (Sandbox Code Playgroud)

这意味着当wp_head()在您的模板中遇到时,wp_enqueue_scripts()正在执行一个被调用的函数,因为它被连接到wp_head,如上面的代码行所示。

的函数定义wp_enqueue_scripts()是:

function wp_enqueue_scripts() {
    /**
     * Fires when scripts and styles are enqueued.
     *
     * @since 2.8.0
     */
    do_action( 'wp_enqueue_scripts' );
}
Run Code Online (Sandbox Code Playgroud)

do_action( 'wp_enqueue_scripts' );上面的就是告诉WordPress的执行所有的回调函数add_action('wp_enqueue_scripts', 'callback')中定义的。

简而言之:

  1. wp_head() 电话 do_action('wp_head')
  2. do_action('wp_head') 执行所有的回调函数 add_action('wp_head','callback')
  3. wp_enqueue_scripts() 是一个回调 add_action('wp_head','callback')
  4. wp_enqueue_scripts() 电话 do_action('wp_enqueue_scripts')
  5. do_action('wp_enqueue_scripts') 执行所有的回调函数 add_action('wp_enqueue_scripts','callback')
  6. startwordpress_scripts() 是一个回调 add_action('wp_enqueue_scripts','callback')
  7. 您定义的 JS/CSSstartwordpress_scripts()包括在内

  • 谢谢瑞凯什!非常清晰的描述,易于阅读和理解。我永远找不到如此精彩的答案。 (2认同)