Estaba escribiendo un pequeño complemento para eliminar algunos elementos de menú para usuarios no administradores del backend, y descubrí que mi complemento no hacía nada a menos que especificara una prioridad en mi código:
add_action('admin_bar_menu', 'remove_toolbar_items', 999);
Sin el 999
, el código no elimina los elementos en mi remove_toolbar_items
función, y con él funciona muy bien:
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');
}
}
Los documentos para el estado del parámetro de prioridad:
Se utiliza para especificar el orden en que se ejecutan las funciones asociadas con una acción particular. Los números más bajos corresponden a la ejecución anterior, y las funciones con la misma prioridad se ejecutan en el orden en que se agregaron a la acción. Valor predeterminado: 10
Sin embargo, no encontré nada que explique cómo se supone que debes determinar qué prioridad usar. ¿Cómo se determina cuándo usar la prioridad y qué prioridad usar? Siento que podría haber estado rascándome la cabeza durante horas si no hubiera jugado con el parámetro de prioridad.
Además, veo que la prioridad predeterminada es 10, pero ¿existe un rango conocido de valores de prioridad?
WordPress pone sus acciones en una matriz con prioridades indexadas. Puede ver esto imprimiendo (en el panel de administración
admin_init
)$wp_filter
:* Nota * como @s_ha_dum señala en los comentarios a continuación,
admin_init
puede que no capte todos los ganchos agregados en la acción, la impresión más confiable puede estar enganchándose en sushutdown
lugar.Esto nos da una matriz ordenada que se parece a esto: (simplificado)
El 0, 4, 7, 10, y así sucesivamente son las prioridades de las acciones, cuando se agrega una nueva acción, su valor predeterminado es 10, similar al índice 0 en el ejemplo anterior, simplemente se apilan en el mismo índice de la matriz . Teniendo en cuenta que muchos ganchos se agregan a esta acción en particular que desearía al final o al final después de ejecutar una acción específica (como menús). 1 de las dos prioridades también podría funcionar con la misma eficacia:
81
o201
.En su mayor parte, la prioridad predeterminada de 10 es suficiente. Otras veces, desea agregar su gancho directamente después de otro (para anular su propósito o eliminar un elemento específico), en cuyo caso puede usar el
global $wp_filter;
para averiguar a dónde debe ir.fuente
admin_init
y solo las cosas enganchadas en la instalación actual. No dice nada sobre lo que podría hacer un plugin o tema aún desinstalado. +1 de todos modos.admin_footer
¿verdad? ¿O sería ese el mismo problema?shutdown
gancho sería su mejor opción, pero solo para el código instalado e incluso entonces, las cosas se pueden enganchar condicionalmente, por lo que es posible que se pierda algo de todos modos.Bueno, hay una manera de encontrar la prioridad de una acción.
podemos usar el siguiente código
has_action( $tag, $function_to_check )
que opcionalmente devuelve la prioridad en ese enlace para la función especificada.Ref: https://codex.wordpress.org/Function_Reference/has_action
fuente
En caso de que alguien esté buscando la lista de prioridad / referencia de acción de WordPress, el enlace de enlace completo está aquí:
https://codex.wordpress.org/Plugin_API/Action_Reference/
fuente