Приоритет хука 'wp_enqueue_scripts' не работает
В теме, над которой я работаю, используется до 3 таблиц стилей. Я использую хук 'wp_enqueue_scripts'. Порядок подключения таблиц стилей важен для правильного переопределения стилей. У меня есть такой код:
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);
С такими приоритетами порядок таблиц стилей должен быть 'stylesheet_one', 'stylesheet_three' и 'stylesheet_two'. Но приоритет не оказывает никакого эффекта. Я пробовал разные числа, но порядок не меняется. Что я делаю не так?
Спасибо за помощь!!!

Проблема в том, что ваши действия выполняются в том порядке, в котором вы их воспринимаете, но WordPress просто собирает стили и включает их в случайном порядке.
Порядок ваших add_actions не будет иметь значения. Я бы сделал так:
function add_all_stylesheets() {
// вы опустили это в своем вопросе, см. ниже
}
add_action('wp_enqueue_scripts', 'add_all_stylesheets');
Теперь — если вы хотите, чтобы ваши скрипты подключались в определенном порядке, вам нужно сделать их "зависимыми" друг от друга, чтобы они каскадировались.
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');
Теперь ваш "stylesheet-two" зависит от "stylesheet-one", а "three" зависит от "two". Это должно дать желаемый эффект.

С этого момента всё работает. Спасибо! Но, честно говоря, это не совсем отвечает на мой вопрос: :P Почему приоритет не имеет эффекта?? Есть ли какие-то подводные камни, о которых нужно знать? Мне просто хочется это понять. Я люблю WordPress и хочу знать все тонкости :D

Внутри WordPress ждёт, пока соберутся все скрипты, прежде чем подключить их.
Допустим, WordPress добавляет 7 своих скриптов, а вы добавляете три. Чуть позже WordPress просматривает список и подключает их так, как считает нужным (определяя, какие скрипты зависят друг от друга).
Неважно, в каком порядке вы добавляете свои скрипты, потому что порядок игнорируется, пока WordPress анализирует зависимости.
Например: вы добавляете 3 скрипта, которым нужен jQuery, но jQuery добавляется четвёртым. Тогда jQuery будет перемещён на первое место.
Вы можете гарантировать порядок только через зависимости: "3 зависит от 2", "2 зависит от 1".

Понятно. При наличии зависимостей параметр приоритета в 'add_action' игнорируется. Но если я удаляю все зависимости, приоритет всё равно игнорируется. Если я использую, например, add_action('wp_head', 'my_function', 5);
, то это работает. Это поведение различается для разных хуков?

Я постараюсь объяснить это ещё раз максимально понятно. Ваш приоритет не игнорируется. Изначально порядок соответствует тому, в каком скрипты добавляются в список. Но затем этот список может быть переупорядочен. Вы можете добавлять их через wp_head, и сейчас это может работать — чисто по везению. Но если вы обновите WordPress или добавите новый плагин, это может перестать работать. Тот факт, что скрипты добавляются в определённом порядке, не гарантирует, что они останутся в этом порядке. Единственный способ гарантировать порядок — использовать зависимости.

Я знаю, что уже поздно. Но теперь всё работает, как ожидалось.
У add_action
есть третий аргумент — приоритет. Ниже я подключил скрипты с приоритетами 10, 12 и 14
. Таким образом, скрипты подключаются на фронтенде в соответствии с заданными приоритетами.
Вот мой фрагмент кода, который отлично работает:
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' );
}
Последовательность подключения:
test_enqueue_styles_1
test_enqueue_styles_3
test_enqueue_styles_2

Хм, есть ли причина, по которой вы делаете это таким образом? Более традиционный метод приведен ниже.
(Следующее предполагает, что ваши таблицы стилей находятся в каталоге css вашей темы.)
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' );
Тем не менее - я не уверен, почему приоритеты в вашем методе не работают. Нам, вероятно, нужно увидеть код в прикрепленных функциях.

в дополнение к этому, если вы укажете зависимость для каждого стиля, порядок их подключения не будет иметь значения.

Я знаю, что могу сделать это в одной функции, как в вашем примере. Я делаю таким образом, потому что использую настройки темы, и все, что связано с настройками темы, находится в отдельных файлах.

Хм, вы все еще можете использовать wp_enqueue_style в своих функциях - и указать правильную зависимость, как предлагают Мило и infamouse.

Извините, часть моего предыдущего комментария потерялась. Вот полная версия :-) Я знаю, что могу сделать это в одной функции, как в вашем примере. Я делаю это таким образом, потому что использую настройки темы, и все, что связано с настройками темы, находится в отдельных файлах. Основная таблица стилей подключается в functions.php, а другие таблицы стилей подключаются в других файлах. Поэтому я попробовал сделать именно так.
