2009-12-23 83 views
2

我有一個函數,其目的是列出我的wordpress主題的圖像目錄內的文件夾。當用戶在網站的根目錄中安裝了wordpress時,它很好用。然而,如果用戶已經在根目錄下的文件夾中安裝了wordpress,那麼失敗...WordPress的>獲取我的主題的圖像目錄的完整路徑,無論父路徑

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

此功能正常工作,只要安裝了WordPress的直接進入該網站的根目錄,如site.com/index.php

但是,此路徑方法失敗,如果用戶已經安裝在他們的博客中虛擬目錄。例如:site.com/somedirectory/index.php

有人可以幫助確定$ mydir路徑的更好方法嗎?

這將是超級簡單的,如果我可以提供我的功能與http地址,但我的功能需要路徑圖像目錄作爲服務器目錄。任何人都知道使用http方法在給定目錄下查找文件夾的方法嗎?例如,我可以參考我的主題的圖像目錄...

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

但是,下面的函數不會帶一個URL,它必須是一個物理文件路徑到我要解析的所選目錄。所以我需要用一個帶URL的函數替換它,或者我需要找到某種方法將$ mydir函數轉換爲物理路徑,或者其他方法。

這裏是我用來解析目錄和分配每個文件夾到數組的功能。

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; 
} 

回答

3

我沒有在這裏安裝WordPress的,但如果你把這個在你的functions.php坐落在你的主題文件夾呢?

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

然後,而不是

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

你只是做

$mydir = get_dir_path();

FILE是一個有用的"magical" constant

7

我更喜歡在可用時使用Wordpress功能。在這種情況下,這將是:

get_stylesheet_directory(). '/images'; 

這將返回images目錄路徑在當前選擇的主題,即使是一個孩子的主題。

Function Reference/get stylesheet directory

+1

這種方法的優點是,如果將來模板目錄的名稱以某種方式改變(這不太可能,但是誰知道在WordPress 10.0中會發生什麼?.. ),這個引用仍然是正確的,而像'/手動編碼'/ wp-content/themes /等等可能會失敗。當然,Automattic很快就不可能改變目錄結構(或「永遠」)。 – 2016-05-21 12:12:36

12

根據食品法典委員會使用正確的功能是:

get_template_directory() 

或者,如果你想要的URI:

get_template_directory_uri() 
0

相反的$_SERVER['DOCUMENT_ROOT']你可以使用HOME_URL。 例如,home_url('/') . 'wp-content/themes/mytheme/images'將生成鏈接http://localhost/,然後是其餘的網址。