問題描述
我在亂七八糟,我知道這是一個愚蠢的問題。你看主題路徑不是那麼好,有沒有什麼其他的方法?我可以在這裏使用 get_template_directory()嗎?
// theme folder path
if ( ! defined( 'TZSC_THEME_DIR' ) ) {
define( 'TZSC_THEME_DIR', dirname(__FILE__).'/' );
}
// theme folder URL
if ( ! defined( 'TZSC_THEME_URL' ) ) {
define( 'TZSC_THEME_URL', plugin_dir_url( __FILE__ ) );
}
最佳解決方法
不要使用常數。根本不要使用全局常量。
有兩種類型的常量:類/接口常量和全局常量。
類或接口中的常量很好,有時也是有用的。一個過於簡單的例子:
interface Requirements
{
const MIN_PHP_VERSION = 5.4;
public function php_is_good();
}
class Theme_Requirements implements Requirements
{
public function php_is_good()
{
return version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
}
}
但請記住,這些常數總是公開的。如果以後更改它們,則可能會破壞依賴於它們的代碼。
全局常數更糟。想象一下:
define( 'THEME_URI', get_template_directory_uri() );
然後一個默認頭像的功能:
function get_default_header_image()
{
return THEME_URI . '/img/default-header.jpg';
}
這個功能可以假設一些不受控制的東西,它知道得太多了。如何用常量的不同值測試該函數?你不行
假設你想測試當常數設置為 non-existing 目錄或另一個較慢的服務器時會發生什麼。但一旦定義了常量,就不能更改其值。你不能一口急跑所有的測試,這使測試比必要更難。
而在一個試圖使用自己的默認圖像的小題材中,你如何實現呢?常數由父主題設置。您可以添加一個支票與 defined(),但這使得更難看到它的值實際寫入的地方。
將函數重寫為:
function get_default_header_image( $base )
{
return esc_url( $base ) '/img/default-header.jpg';
}
我之前説過,常數是一個 API 。 API 應該很容易改變,但是由於 PHP 不會記錄訪問權限,所以很難否定常量。所以您的棄用消息將永遠不會覆蓋其他開發人員,除非他們仔細閲讀您的源代碼或文檔。相信我,他們不會。
在子主題中使用 get_stylesheet_directory_uri(),在父主題中使用 get_template_directory_uri()。兩者都可以在運行時進行過濾,因此您可以一次運行所有測試。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。