2009-12-23 4 views
2

J'ai une fonction dont le but est de lister les dossiers dans le répertoire images de mon thème wordpress. Cela fonctionne très bien lorsque l'utilisateur a installé wordpress dans le répertoire racine du site. Toutefois, il échoue si l'utilisateur a installé wordpress dans un dossier sous la racine ...Wordpress> obtenir le chemin d'accès complet au répertoire d'images de mon thème sans tenir compte des chemins parents

$ mydir = get_dirs ($ _ SERVER ['DOCUMENT_ROOT']. '/ Wp-content/themes/mytheme/images');

Cette fonction fonctionne très bien tant que le wordpress est installé directement dans la racine du site, comme site.com/index.php

Cependant, cette méthode de chemin échoue, si l'utilisateur a installé son blog dans un répertoire virtuel. Exemple: site.com/somedirectory/index.php

Quelqu'un peut-il aider avec une meilleure méthode pour déterminer le chemin du $ mydir?

Ce serait très simple si je pouvais alimenter ma fonction avec l'adresse http, mais ma fonction nécessite le chemin vers le répertoire images comme répertoire du serveur. Quelqu'un sait-il un moyen de trouver les dossiers sous un répertoire donné en utilisant la méthode http à la place? Par exemple, je peux obtenir une référence au répertoire de mon thème avec des images ...

$ mydir = get_bloginfo ('url') '/ wp-content/themes/MyTheme/images'.

Cependant, la fonction ci-dessous, ne prendra pas une URL, il doit s'agir d'un chemin physique vers le répertoire que je veux analyser. Donc j'ai soit besoin de le remplacer par une fonction qui prend une URL ou j'ai besoin de trouver un moyen de convertir la fonction $ mydir en un chemin physique, ou peut-être d'autres moyens.

Voici la fonction que j'utilise pour analyser le répertoire et assigner chaque dossier à un tableau.

function get_dirs($path = '.') 
{ 
$dirs = array(); 
try 
{ 
    foreach (new DirectoryIterator($path) as $file) 
    { 
     if ($file->isDir() && !$file->isDot()) 
     { 
     $dirs[] = $file->getFilename(); 
     } 
    } 
} 
catch(Exception $e) 
{ 
    //log exception or process silently 
    //just for test 
    echo "There is a problem inside the get_dirs function"; 
} 
return $dirs; 
} 

Répondre

3

Je ne l'ai pas Wordpress installé ici, mais si vous mettez dans votre functions.php situé dans votre dossier de thème?

function get_dir_path(){ 
    return dirname(__FILE__).'/images'; 
} 

Puis, au lieu de

$mydir = get_bloginfo('url').'/wp-content/themes/mytheme/images';

vous venez

$mydir = get_dir_path();

FICHIER est un "magical" constant utile. Je préfère utiliser les fonctions Wordpress lorsqu'elles sont disponibles.

0

Peut-être ce que vous cherchez: Template Tags/bloginfo « WordPress Codex

+0

Merci chanson, qui est utile pour trouver le chemin de l'URL vers le répertoire cible. Cependant, ma fonction nécessite un chemin physique puisqu'elle utilise DirectoryIterator –

7

Dans ce cas, ce serait:

get_stylesheet_directory(). '/images'; 

Cela renverra le chemin du répertoire d'images dans le thème sélectionné, même si elle est un thème enfant.

Function Reference/get stylesheet directory

+1

L'avantage de cette méthode est que si dans le futur les noms des répertoires pour les templates change d'une façon ou d'une autre (c'est peu probable, mais qui sait ce qui se passera dans WordPress 10.0? .), cette référence sera toujours correcte, tandis que le "handcoding" des choses comme/wp-content/themes/... pourrait échouer. Bien sûr, il est * très * peu probable qu'Automattic change rapidement la structure du répertoire (ou 'ever'). –

12

Selon le codex la fonction à utiliser est:

get_template_directory() 

Ou si vous voulez que le uri:

get_template_directory_uri() 
0

Au lieu de $_SERVER['DOCUMENT_ROOT'] vous pouvez utiliser HOME_URL. Par exemple, home_url('/') . 'wp-content/themes/mytheme/images' va générer un lien http://localhost/ suivi du reste de l'URL.

Questions connexes