问题描述
我在乱七八糟,我知道这是一个愚蠢的问题。你看主题路径不是那么好,有没有什么其他的方法?我可以在这里使用 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。