如何使用 wp_enqueue_script 更改 foreach 内的顺序?

How to change order inside foreach using wp_enqueue_script?

我为每个循环创建了一个循环,以在开发和生产模式的页脚中动态加载我的构建文件夹中的所有脚本文件。这样我就不需要手动替换脚本文件了。

但是我有一个问题,我不知道如何将文件的顺序更改为特定的顺序。

应该是:Runtime、Vendors、Main。

这是我的 PHP 代码:

// First check if "JS" folder exist to prevent errors.
if(is_dir(THEME_DIR_ASSETS . '/js')) {
    // Enqueue all scripts.
    function nm_enqueue_scripts() {
    $directoryJS = new DirectoryIterator(THEME_DIR_ASSETS . '/js');

        wp_deregister_script('jquery');
        wp_enqueue_script('jquery', 'https://code.jquery.com/jquery-2.2.4.min.js', array(), null, false);

        foreach ($directoryJS as $file) {
            if (pathinfo($file, PATHINFO_EXTENSION) === 'js') {
            $fullName = basename($file);
            $name = substr(basename($fullName), 0, strpos(basename($fullName), '.'));

            wp_enqueue_script($name, THEME_DIR_JS . '/' . $fullName, $name, null, true);
            }
        }
    }
    add_action('wp_enqueue_scripts', 'nm_enqueue_scripts');
}

我该怎么做?

您需要指定每个文件的依赖关系,以便能够按照您想要的顺序将它们排入队列。 所以在 $directoryJS 数据中,你可以设置每个脚本的依赖关系,这样它看起来像这样:

$directoryJS = [
[
'script_name' => 'some-name' 
'script_url' => 'path to script',
'deps' => [ 'other-file-name']
],
[
'script_name' => 'other-file-name' 
'script_url' => 'path to other script',
'deps' => [ ]
]
]

在 foreach 语句中,入队脚本函数如下所示: wp_enqueue_script($script_name, THEME_DIR_JS . '/' . $fullName, $deps, '', true);.

在这种情况下,WP 会将 'other-file-name' 脚本排在 'some-name' 脚本之前。