¿En qué prioridad add_filter sobrescribe las funciones del core?
Estoy escribiendo un plugin que agrega algunas miniaturas adicionales, casillas de verificación, etc. al final de una entrada.
Estoy tratando de entender cómo usar add_filter correctamente.
Básicamente, tengo
add_filter('the_content', 'do_some_magic_at_the_end');
Y hay una función correspondiente do_some_magic_at_the_end que toma $content y le añade algunas cosas al final.
Quiero que este filtro se agregue después de todos los demás filtros. No quiero que sobrescriba ningún otro filtro. La documentación dice que la prioridad predeterminada es 10, así que asumo que simplemente se está agregando a una cadena de filtros que se ejecutan en the_content.
Si establezco la prioridad en 1, ¿sobrescribirá alguna función del core?

No hay una respuesta definitiva porque no hay límite para las prioridades altas/bajas. Además, los plugins pueden ser mucho menos cuidadosos que el núcleo con esto.
- 11 es un buen número para estar después de la prioridad predeterminada;
- 20 para estar tarde;
- varios miles es bueno para estar más tarde que cualquiera que no haya puesto más ceros en sus miles;
- 9 es un buen número para estar un poco antes que el predeterminado;
- 1 para estar realmente temprano;
- -1 para estar casi definitivamente primero, porque muy poca gente recuerda que las prioridades pueden ser negativas.
En general, si quieres estar seguro de que estás antes que otras funciones, tendrás que volcar todo lo que se añade al hook en tu configuración específica y depurar a través de eso. Es posible que necesites crear una función envoltorio para añadir tus filtros en una etapa de carga específica o incluso mover otros filtros.
Y si estás haciendo un plugin para distribución, puedes adivinar, pero no puedes estar seguro.

Una forma (muy ineficiente) de asegurarte de que tu filtro se ejecute al final, es engancharte a la acción all
, donde puedes examinar el arreglo $wp_filter
y agregar tu filtro con la prioridad más tardía. Así que técnicamente puedes estar seguro, pero no vale la pena. También podrías usar PHP_INT_MAX
como tu prioridad.

Buen punto sobre all
pero no lo usaría de esa manera. Terriblemente ineficiente, de hecho. En cuanto al máximo, tampoco iría a extremos... La prioridad se almacena como clave de arreglo, que PHP puede interpretar tanto como entero como cadena. Llegar a casos extremos podría causar problemas.

Solo para añadir más clarificación, esto es parcialmente correcto y parcialmente incorrecto. Efectivamente no sobrescribes el comportamiento del núcleo; lo alteras antes o después. De todos modos todos los filtros por definición se ejecutan secuencialmente así que, tarde o temprano, todos los filtros se ejecutan exactamente una vez y uno a la vez, incluidos los del núcleo si existen. De: Fuente que cito: las funciones con la misma prioridad se ejecutan en el orden en que fueron añadidas a la acción.
