Quedé impresionado cuando descubrí ganchos de WordPress como Acciones y Filtros, donde puede modificar o cambiar toda la funcionalidad de su CMS solo desde una función personalizada y su gancho. Estoy buscando el método o el patrón de arquitectura o incluso el código de ejemplo, que explicará cómo funciona. ¿Qué tiene que escribir en su clase personalizada (por ejemplo) para permitirle cambiar algunas características principales? No importa CMS o lenguaje de programación. Podría ser WordPress o JS/PHP CMS personalizado.
Esto se puede hacer de muchas maneras, pero el concepto básico es bastante simple. Para esto te mostraré lo que hace WordPress a un alto nivel usando estas dos funciones:
apply_filters($name, $value, …$context) { global $filters; foreach($filters[$name] ?? [] as $callback) { $value = $callback($value, …$context); } return $value; } add_filter($name, $callback) { global $filters; if(!isset($filters[$name])){ $filters[$name] = []; } $filters[$name][] = $callback; } La función add_filter es donde los programadores registran su interés en cambiar algo. WordPress define el parámetro $name y es exclusivo de la ubicación en la que se usa en el código (o lo suficientemente exclusivo siempre que varias personas que llaman hagan lo mismo con los datos). El parámetro $callback es un código personalizado para hacer algo con los datos y devolver algo. Todo aquí se almacena en una matriz global.
La función apply_filters es donde el código de WordPress recorre la matriz global para una clave con nombre específico que devuelve una submatriz donde cada elemento es una devolución de llamada. Luego llama a cada devolución de llamada con el $value de interés específico, junto con cualquier $context opcional que alguien pueda necesitar.
Me falta un montón de cordura comprobando aquí, pero esa es la esencia. En el caso de WordPress, en realidad hay un objeto dedicado para los filtros que se almacena en la matriz global, y hay prioridades para que los programadores puedan insinuar el orden en que se registra su $callback .
El uso es muy simple en el código central entonces:
// Normal code here $data = get_data(); // See if anyone wants to change it $data = apply_filters('after_get_data', $data); // Back to normal code Las acciones son similares a los filtros y, en el caso de WordPress, comparten la misma lógica central. La única diferencia importante es que las acciones no devuelven nada, sino que comparten el mismo patrón de un $name común junto con algunos argumentos opcionales.
Otra forma en que WordPress permite extensiones es a través de código conectable. Básicamente, hay un archivo que se cargó muy tarde con un montón de funciones incluidas en if(!function_exists('…')){} . Esto permite que otros programadores creen estas funciones y WordPress usará la versión de los programadores en lugar de la del núcleo.