問題描述
我在亂七八糟,我知道這是一個愚蠢的問題。你看主題路徑不是那麼好,有沒有什麼其他的方法?我可以在這裡使用 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。