web-dev-qa-db-fra.com

Le moyen le plus élégant de mettre en file d'attente des scripts dans function.php avec une boucle foreach

Je me demande s’il existe un moyen d’exécuter wp_register_script et de mettre en file d’enregistrement à l’aide de foreach loop pour gérer les libellés et les dir

Par exemple,

function wbs_app_components(){
$scripts_list=array(
            'jquery' => ToDir('/jquery/jquery.js', $LIBRARY_DIR),
            'bootstrap-jquery' => ToDir('/bootstrap/js/bootstrap.js', $LIBRARY_DIR),
    }
foreach ($scripts_list as $key => $value){
            // print_r($key);echo ("<br>");
            // print_r($value);echo ("<br><br><br>");
            wp_register_script($key,$value);
        }
}

add_action( 'wp_enqueue_scripts', 'wbs_app_components');

Cependant, chose amusante, il semble que NONE du script ne soit joint et aucune erreur signalée!

Je me demande quelle pourrait être la raison

1
Ezeewei

Vous devez également mettre les scripts en file d'attente, pas seulement les enregistrer. Cependant, vous pouvez simplement mettre en file d'attente un script sans l'enregistrer si vous n'allez pas le mettre en file d'attente de manière conditionnelle.

Je voudrais essayer quelque chose comme ça: ( Non testé et nécessite PHP5.4 + )

add_action( 'wp_enqueue_scripts', enqueue_scripts, 11 );
function enqueue_scripts()
{
    /**
     * Build an array of scripts to enqueue
     * key = script handle
     * value = path to the script without the get_template_directory_uri()
     */
    $scripts = [
        'script-1' => '/script.1.js',
        'script-2' => '/js/script.2.js',
        'script-3' => '/subfolder/script.3.js',
    ];
    foreach ( $scripts as $k=>$v )
        wp_enqueue_script( $k, get_template_directory_uri() . $v );
}

MODIFIER

Comme explication à un commentaire sur la réponse, l’appel add_action() peut aller n’importe où, il n’a même pas besoin d’être dans le même modèle. Il peut aller au-dessus ou au-dessous de la déclaration de fonction. Je préfère ajouter l'appel add_action() au-dessus de la fonction, car cela a plus de sens lorsque vous pensez aux fermetures. Lorsque vous utilisez des fermetures, le code ci-dessus ressemblera à ceci:

add_action( 'wp_enqueue_scripts', function ()
{
    /**
     * Build an array of scripts to enqueue
     * key = script handle
     * value = path to the script without the get_template_directory_uri()
     */
    $scripts = [
        'script-1' => '/script.1.js',
        'script-2' => '/js/script.2.js',
        'script-3' => '/subfolder/script.3.js',
    ];
    foreach ( $scripts as $k=>$v )
        wp_enqueue_script( $k, get_template_directory_uri() . $v );
}, 11 );

Donc vous voyez, ça a plus de sens :-)

5
Pieter Goosen

Si vous voulez mettre en file d'attente vos fichiers séparément, utilisez ce code et continuez de pouvoir les enregistrer (vous voudrez probablement aussi l'utiliser après), utilisez ceci:

$template_directory = get_template_directory_uri();
$array_of_js_files = array( 
    array(
        'script_handle1',
        $template_directory . '/your_directory/file1.js',
        array(), //any dependency your script has
        '1.0.0', // version number 1.0.0 is an example
        true // in footer or not
    ),
    array(
        'script_handle2',
        $template_directory . '/your_directory/file2.js',
        array(),
        '1.0.0',
        true
    )
);

$array_of_css_files = array( 
    array(
        'css_handle1',
        $template_directory . '/your_directory/file1.css',
        array(), //any dependency your css file has
        '1.0.0', // version number 1.0.0 is an example
        'screen' // media
    ),
    array(
        'css_handle2',
        $template_directory . '/your_directory/file2.css',
        array(),
        '1.0.0',
        'screen'
    )
);


foreach( $array_of_js_files as $data ){
    wp_register_script( $data[0], $data[1], $data[2], $data[3], $data[4] );
    wp_enqueue_script( $data[0] );
}

// to enqueue your script or css file later simply refer to your the handle you created

foreach( $array_of_css_files as $data ){
    wp_register_style( $data[0], $data[1], $data[2], $data[3], $data[4] );
    wp_enqueue_style( $data[0] );
}

Notez que ce code ci-dessus n’a pas été testé, mais il devrait fonctionner.

0
MMK