Creación del class-loader

namespace ManagerBlock;

defined('ABSPATH') || exit;

spl_autoload_register(function ($class) {
    if (strpos($class, 'ManagerBlock') !== false) {
        $file = plugin_dir_path(__DIR__) . 'includes/class-' . strtolower(str_replace('ManagerBlock\\', '', $class)) . '.php';
        if (file_exists($file)) {
            require_once $file;
        }
    }
});

La línea namespace ManagerBlock; define el espacio de nombres para el código que sigue.

  • Propósito: Evita conflictos de nombres. Si otro plugin o tema define una clase con el mismo nombre que una de las tuyas (ej., una clase llamada Settings), el namespace garantiza que la clase correcta sea cargada para tu plugin porque su nombre completo es ManagerBlock\Settings.

La función spl_autoload_register() registra la función anónima que le sigue como el mecanismo de carga de clases de tu plugin.

  • Propósito: Cuando PHP encuentra una clase que aún no ha sido definida (ej., new ManagerBlock\BlockRegister()), esta función se activa automáticamente, recibe el nombre de la clase como argumento ($class), y se encarga de encontrar y cargar el archivo correcto.

Filtro por Namespace:

  • if (strpos($class, 'ManagerBlock') !== false): Comprueba si el nombre de la clase que PHP busca contiene la cadena ManagerBlock. Si no la contiene, el autocargador no hace nada y deja que otros autoloaders se encarguen. Esto evita que tu plugin intente cargar clases de otros plugins.

Construcción de la Ruta del Archivo:

  • Esta línea toma el nombre de la clase (ej., ManagerBlock\Settings) y lo transforma en el nombre de archivo esperado (ej., includes/class-settings.php).
  • plugin_dir_path(__DIR__): Obtiene la ruta del directorio principal del plugin.
  • str_replace('ManagerBlock\\', '', $class): Elimina el namespace para obtener solo el nombre de la clase (ej., de ManagerBlock\Settings a Settings).
  • strtolower(...): Convierte el nombre de la clase a minúsculas.
  • El resultado final es una ruta como: /ruta/al/plugin/includes/class-settings.php.

Carga Condicional:

  • if (file_exists($file)) { require_once $file; }: Comprueba si el archivo existe en la ruta construida y, si es así, lo incluye.

Este código asegura que cada clase de tu plugin se cargue solo en el momento justo en que se llama, manteniendo tu plugin rápido y organizado.