致命错误和在子主题中使用未定义的常量,除非我重新定义它

时间:2020-08-18 作者:zigojacko

子主题functions.php:

// Init.
require_once( WPBF_CHILD_THEME_DIR . \'/inc/init-child.php\');
在父主题中functions.php, 常数定义如下:

define( \'WPBF_CHILD_THEME_DIR\', get_stylesheet_directory() );
如果我像上面一样在子主题中包含相同的常量定义,那么require_once 工程和/inc/init-child.php 文件已加载。

然而,我收到一个通知,声明常量已经在父主题的functions.php (正确!)。

但如果我把这个从儿童主题中删除functions.php, 然后我得到以下结果:-

Warning: Use of undefined constant WPBF_CHILD_THEME_DIR - assumed \'WPBF_CHILD_THEME_DIR\' (this will throw an Error in a future version of PHP) in /var/www/vhosts/xxx/subdomains/xxx/httpdocs/wp-content/themes/page-builder-framework-child/functions.php on line 42

Warning: require_once(WPBF_CHILD_THEME_DIR/inc/init-child.php): failed to open stream: No such file or directory in /var/www/vhosts/xxx/subdomains/xxx/httpdocs/wp-content/themes/page-builder-framework-child/functions.php on line 42

Fatal error: require_once(): Failed opening required \'WPBF_CHILD_THEME_DIR/inc/init-child.php\' (include_path=\'.:/opt/plesk/php/7.3/share/pear\') in /var/www/vhosts/xxx/subdomains/xxx/httpdocs/wp-content/themes/page-builder-framework-child/functions.php on line 42
那么,为什么我只能通过子主题加载文件,如果我重新定义常量,即使它将向我显示一个通知,说明它已经定义了。。。?

相同的常量已在同一子主题中使用functions.php 进一步归档,如:

// Textdomain.
load_child_theme_textdomain( \'page-builder-framework-child\', WPBF_CHILD_THEME_DIR . \'/languages\' );
我假设应该有一种正确的方法来加载所需的文件,而不必重复常量定义?

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

这里需要了解的重要一点是,子主题加载在父-父主题之前。因此,如果您试图在子主题中使用父主题中定义的函数、变量或常量,则会导致错误,除非您在加载父主题后运行的挂钩函数中使用它们。

我不知道为什么您的父主题会定义子主题目录本身,您需要询问其作者,但我的建议是不要依赖子主题中的定义。如果要获取子主题中文件的路径,请使用get_theme_file_path(), 而不是像这样的常数:

require_once get_theme_file_path( \'inc/init-child.php\' );
或者这个:

load_child_theme_textdomain( \'page-builder-framework-child\', get_theme_file_path( \'languages\' ) );

相关推荐

Child-theme breaks site

所以,我有一个子主题,里面除了所需的CSS文件之外什么都没有。一旦我激活了这个儿童主题,我的整个网站就关闭了。最后我有两个问题:激活一个只有CSS的子主题怎么能破坏我的网站</我怎样才能回到我原来的主题</这些是网站给我的错误:Warning: require_once(/wp-content/themes/interio_child/admin/options-framework.php) [function.require-once]: 无法打开流:中没有此类文件或目录/wp-c