Я писал небольшой плагин для удаления некоторых элементов меню для пользователей, не являющихся администраторами, из бэкэнда и обнаружил, что мой плагин ничего не делает, если в своем коде не указан приоритет:
add_action('admin_bar_menu', 'remove_toolbar_items', 999);
Без этого 999
код не удаляет элементы в моей remove_toolbar_items
функции, и с этим он прекрасно работает:
function remove_toolbar_items( $wp_admin_bar ) {
if ( !current_user_can( 'manage_options' ) ) {
$wp_admin_bar->remove_node('new-post');
$wp_admin_bar->remove_node('comments');
}
}
В документах для государства параметров приоритета:
Используется для указания порядка, в котором выполняются функции, связанные с конкретным действием. Меньшие числа соответствуют более раннему выполнению, а функции с одинаковым приоритетом выполняются в том порядке, в котором они были добавлены к действию. Значение по умолчанию: 10
Однако я не нашел ничего, что объясняет, как вы должны определить, какой приоритет использовать. Как вы определяете, когда использовать приоритет и какой приоритет использовать? Я чувствую, что мог бы часами чесать голову, если бы не играл с параметром приоритета.
Кроме того, я вижу, что приоритет по умолчанию - 10, но есть ли известный диапазон значений приоритетов?
WordPress помещает ваши действия в массив с индексированными приоритетами. Вы можете увидеть это, распечатав (в панели администратора
admin_init
)$wp_filter
:* Примечание *, как указывает @s_ha_dum в комментариях ниже,
admin_init
может не поймать все добавленные хуки в действии,shutdown
вместо этого может быть подключена более надежная распечатка .Это дает нам аккуратный массив, который выглядит примерно так: (упрощенно)
0, 4, 7, 10 и т. Д. Являются приоритетами действий. Когда добавляется новое действие, по умолчанию используется значение 10, аналогично индексу 0 в приведенном выше примере, они просто помещаются в тот же индекс массива. , Учитывая, что в это конкретное действие добавлено много хуков, вы захотите включить его в самом конце или, наконец, после выполнения определенного действия (например, меню). 1 из двух приоритетов также может работать так же эффективно:
81
или201
.По большей части приоритет по умолчанию 10 достаточно. В других случаях вы хотите добавить свой хук сразу за другим (возможно, чтобы аннулировать его назначение или удалить конкретный элемент), и в этом случае вы можете использовать,
global $wp_filter;
чтобы выяснить, куда он должен идти.источник
admin_init
и только вещи, подключенные к текущей установке. В нем ничего не говорится о том, что может сделать еще неустановленный плагин или тема. +1 в любом случае.admin_footer
хотя, верно? Или это будет та же проблема?shutdown
Крюк будет лучшим выбором, но только для установленного кода и даже тогда, вещи могут быть условно зацепила так что это может быть возможно пропустить некоторые так или иначе.Ну, есть способ найти приоритет действия.
мы можем использовать следующий код,
has_action( $tag, $function_to_check )
который при желании возвращает приоритет этой ловушки для указанной функции.Ссылка: https://codex.wordpress.org/Function_Reference/has_action
источник
На тот случай, если кто-то ищет список приоритетов и ссылок для действий WordPress, полная ссылка здесь:
https://codex.wordpress.org/Plugin_API/Action_Reference/
источник