2015-07-17 1 views
-1

Je suis la convention de nommage de WordPress où une classe My_Class devrait résider dans le fichier nommé class-my-class.php. J'ai utilisé this autoloader pour WordPress, écrit par Rarst. Si j'imprime la variable $class_name, je vois que le préfixe class est ajouté au nom du dossier et non au fichier de classe. J'ai eu le même problème avec un autre chargeur automatique que j'ai utilisé plus tôt. Je peux faire un peu de manipulation de chaînes et obtenir ce que je veux, mais je veux savoir quel est le problème exact.

Qu'est-ce qui pourrait ne pas fonctionner?

+0

À quoi ressemble votre code? Comment implémentez-vous la classe autoloader pour wordpress? L'autochargeur lui-même ne fait que préfixer un répertoire, s'il est donné dans le constructeur. Sinon, c'est le répertoire actuell dans lequel se trouve l'autochargeur. Je suppose que vous utilisez des noms de classe incorrects par exemple. – Marcel

+0

J'ai utilisé un autochargeur qui est supposé suivre les normes de codage de WP. Cela fonctionne dans les deux sens. Les noms de classe sont corrects. –

Répondre

0

Je viens d'avoir un coup d'oeil à ce autoloader vous lié, je dirais qu'il devrait être en ligne 21 quelque chose comme ceci:

$class_path = $this->dir . '/class-' . strtolower(str_replace('_', '-', basename($class_name))) . '.php';

basename ne prend que la partie du fichier + extension de fichier du chemin .

Vous devez également vérifier où se trouve ce fichier d'autochargeur, car $ this-> dir est défini sur DIR, qui correspond au répertoire dans lequel se trouve le fichier de l'autoloader.

+0

Cela fonctionne, le fichier de classe est inclus. Mais j'ai toujours une erreur que la classe ne soit pas trouvée. –

0

Utilisez un chargeur flexible. essayez celui-ci.

function TR_Autoloader($className) 
{ 
$assetList = array(
    get_stylesheet_directory() . '/vendor/log4php/Logger.php', 
    // added to fix woocommerce wp_email class not found issue 
    WP_PLUGIN_DIR . '/woocommerce/includes/libraries/class-emogrifier.php' 
    // add more paths if needed. 
); 

// normalized classes first. 
$path = get_stylesheet_directory() . '/classes/class-'; 
$fullPath = $path . $className . '.php'; 

if (file_exists($fullPath)) { 
    include_once $fullPath; 
} 

if (class_exists($className)) { 
    return; 
} else { // read the rest of the asset locations. 
    foreach ($assetList as $currentAsset) { 
     if (is_dir($currentAsset)) { 
      foreach (new DirectoryIterator($currentAsset) as $currentFile) { 
       if (!($currentFile->isDot() || ($currentFile->getExtension() <> "php"))) 
        require_once $currentAsset . $currentFile->getFilename(); 
      } 
     } elseif (is_file($currentAsset)) { 
      require_once $currentAsset; 
     } 

    } 
} 
} 

spl_autoload_register('TR_Autoloader');