子主题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\' );
我假设应该有一种正确的方法来加载所需的文件,而不必重复常量定义?
最合适的回答,由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\' ) );