重写子主题中的常量

时间:2014-08-12 作者:fromthestone

我有一个父主题,在中声明这些常量function.php:

define("THEME_DIR", get_template_directory());
define("THEME_DIR_URI", get_template_directory_uri());
define("THEME_NAME", "BARNELLI");
define("THEME_STYLES", THEME_DIR_URI . "/css");
define("THEME_INCLUDES", THEME_DIR . "/includes");
define("THEME_POST_TYPES", THEME_DIR . "/includes/post-types");
define("THEME_INCLUDES_URI", THEME_DIR_URI . "/includes");
define("THEME_FONTS", THEME_DIR_URI . "/font-awesome");
我需要修改中包含的一些文件includes 目录并复制目录结构(包括文件)。

正如我在Codex文档中所读到的,function.php 在子主题中,在父主题中的同一文件之前加载,并且只有父主题根目录中的文件才能在子主题中重写。

如果我在child中声明修改后的常量function.php 将被家长的function.php 而且,如果我将包含的文件复制(并修改)到子主题目录中,将无法工作。

你有什么建议来解决这个问题?

1 个回复
最合适的回答,由SO网友:sakibmoon 整理而成

常数不能那么容易地重新定义。

https://stackoverflow.com/questions/8465155/redefine-constants-in-php

因此,将使用子主题中的常量,而不是父主题中的常量。虽然会出现警告,但如果禁用警告,则不会产生任何问题。

如果不需要任何警告,应添加如下常量:

if ( !defined(\'CONSTANT\') )
    define(\'CONSTANT\', \'constant_value\');

EDIT:

简单回答,在子主题中添加常量functions.php 当你使用这些常数时,就会用到它。

宽泛的回答是,为什么还要修改常数?不应修改常量。您可以创建自己的常量集,以便在子主题中使用。如果我是你,我会在儿童主题中添加以下内容functions.php 并在必要时使用这些新常数。

define("CHILD_THEME_DIR", get_stylesheet_directory());
define("CHILD_THEME_DIR_URI", get_stylesheet_directory_uri());
define("CHILD_THEME_NAME", "BARNELLI-CHILD");
define("CHILD_THEME_STYLES", CHILD_THEME_DIR_URI . "/css");
define("CHILD_THEME_INCLUDES", CHILD_THEME_DIR . "/includes");
define("CHILD_THEME_POST_TYPES", CHILD_THEME_DIR . "/includes/post-types");
define("CHILD_THEME_INCLUDES_URI", CHILD_THEME_DIR_URI . "/includes");
define("CHILD_THEME_FONTS", CHILD_THEME_DIR_URI . "/font-awesome");
由于父主题已经声明了常量,@toscho的答案不适用于您的案例。

结束

相关推荐

Responsive Admin Themes

我在看这个管理主题的示例(http://themepixels.com/main/themes/demo/webpage/shamcey/dashboard.html). 至于标签为“Navigation”的左侧管理栏,有没有一种方法可以在不使用插件的情况下实现这种类型的左侧仪表板管理菜单?我想用css、js或Jquery来实现这一点,任何处理编码的东西都可以。