web-dev-qa-db-fra.com

La priorité du crochet 'wp_enqueue_scripts' n'a aucun effet

Dans un thème que je travaille, il y a jusqu'à 3 feuilles de style. J'utilise le hook 'wp_enqueue_scripts'. L'ordre des feuilles de style est important pour le remplacement des styles. J'ai un code comme celui-ci:

add_action('wp_enqueue_scripts', 'add_stylesheet_one', 10);
add_action('wp_enqueue_scripts', 'add_stylesheet_two', 14);
add_action('wp_enqueue_scripts', 'add_stylesheet_three', 12);

Avec ces priorités, l'ordre des feuilles de style doit être 'stylesheet_one', 'stylesheet_three' et 'stylesheet_two'. Mais la priorité n'a aucun effet. J'ai essayé différents numéros mais l'ordre n'a pas changé. Est-ce que je manque quelque chose?

Merci pour l'aide !!!

4
Markus Schober

Le problème est que vos actions sont exécutées dans l'ordre que vous percevez, mais les styles sont simplement collectés par WordPress et inclus dans un ordre aléatoire.

L'ordre de vos add_actions ne sera pas important. Je voudrais faire ceci:

function add_all_stylesheets() {
  // you omitted this from your question, see below
}
add_action('wp_enqueue_scripts', 'add_all_stylesheets');

Maintenant, si vous souhaitez que vos scripts soient inclus dans l’ordre, vous devez les faire "dépendre" les uns des autres pour qu’ils se mettent en cascade.

function add_all_stylesheets() {
  wp_enqueue_style( 'stylesheet-one', get_template_directory_uri() . '/css/stylesheet-one.css' );
  wp_enqueue_style( 'stylesheet-two', get_template_directory_uri() . '/css/stylesheet-two.css', array( 'stylesheet-one' ) );
  wp_enqueue_style( 'stylesheet-three', get_template_directory_uri() . '/css/stylesheet-three.css', array( 'stylesheet-two' ) );
}
add_action('wp_enqueue_scripts', 'add_all_stylesheets');

Maintenant, votre "feuille de style-deux" dépend de "feuille de style-un" et "trois" dépend de "2. Cela devrait être l'effet que vous voulez.

9
funwhilelost

Je sais que c'est trop tard. Mais, maintenant, cela fonctionne comme prévu.

add_action a 3ème argument qui est la priorité. Ci-dessous, j'ai mis en file d'attente les scripts avec les priorités 10, 12 and 14. Donc, il met en file d'attente les scripts avec le frontend de priorités donné.

Ci-dessous, est mon extrait et cela fonctionne bien.

add_action( 'wp_enqueue_scripts', 'test_enqueue_styles_1', 10 );
add_action( 'wp_enqueue_scripts', 'test_enqueue_styles_2', 14 );
add_action( 'wp_enqueue_scripts', 'test_enqueue_styles_3', 12 );

function test_enqueue_styles_1() {
    wp_enqueue_style( 'font-awesome-1-css', get_template_directory_uri() . 'assets/css/font-awesome.min.css' );
}

function test_enqueue_styles_2() {
    wp_enqueue_style( 'font-awesome-2-css', get_template_directory_uri() . 'assets/css/font-awesome.min.css' );
}

function test_enqueue_styles_3() {
    wp_enqueue_style( 'font-awesome-3-css', get_template_directory_uri() . 'assets/css/font-awesome.min.css' );
}

Séquence en file d'attente

test_enqueue_styles_1
test_enqueue_styles_3
test_enqueue_styles_2
4
maheshwaghmare

Hmm, y a-t-il une raison pour laquelle vous le faites de cette façon? La méthode plus conventionnelle est ci-dessous.

(Ce qui suit suppose que vos feuilles de style sont dans le répertoire CSS de votre thème.)

function my_enqueue_scripts() {
    wp_enqueue_style( 'stylesheet_one', get_template_directory_uri() . '/css/stylesheet_one.css' );
    wp_enqueue_style( 'stylesheet_three', get_template_directory_uri() . '/css/stylesheet_three.css' );
    wp_enqueue_style( 'stylesheet_two', get_template_directory_uri() . '/css/stylesheet_two.css' );
}

add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );

Cela dit - je ne sais pas pourquoi les priorités de votre méthode ne fonctionnent pas. Nous aurions probablement besoin de voir le code dans les fonctions attachées.

1
vancoder