通过将以下代码放置在子主题的functions.php
文件
该函数可以工作,但会引发以下错误:
警告:在/Users/myuser/Local-Sites/storytime/app/public/wp-content/themes/buddyboss-THEME-child/functions中使用未定义的常量THEME\\u HOOK\\u前缀-假定为“THEME\\u HOOK\\u PREFIX”(这将在未来版本的PHP中引发错误)。php在线82
这是我的孩子主题中的代码functions.php
:
//Removing the comments section
if ( ! function_exists( \'bjg_buddyboss_theme_single_template_part_content\' ) ) {
function bjg_buddyboss_theme_single_template_part_content( $post_type ) {
if ( wp_job_manager_is_post_type() ) :
get_template_part( \'template-parts/content\', \'resume\' );
elseif ( gamipress_is_post_type() ) :
get_template_part( \'template-parts/content\', \'gamipress\' );
else :
get_template_part( \'template-parts/content\', $post_type );
endif;
}
add_action( THEME_HOOK_PREFIX . \'_single_template_part_content\', \'bjg_buddyboss_theme_single_template_part_content\' );
}
function change_buddyboss_theme_single_template_part_content() {
remove_filter( THEME_HOOK_PREFIX . \'_single_template_part_content\', \'buddyboss_theme_single_template_part_content\' );
add_filter( THEME_HOOK_PREFIX . \'_single_template_part_content\', \'bjg_buddyboss_theme_single_template_part_content\' );
}
add_action( \'after_setup_theme\', \'change_buddyboss_theme_single_template_part_content\' );
我知道错误告诉我常数
THEME_HOOK_PREFIX
未定义,但我不确定原因,因为我复制了
bjg_buddyboss_theme_single_template_part_content
来自父主题的函数。所以
THEME_HOOK_PREFIX
必须在父主题的某个位置定义,因为如果我从子主题中删除此代码,它不会引发此错误。
这是在父主题中定义常量的地方。父主题中此代码的路径为buddyboss-theme/inc/init.php
:
/**
* Setup config/global/constants etc variables
*/
private function _setup_globals() {
// Get theme path
$this->_tpl_dir = get_template_directory();
// Get theme url
$this->_tpl_url = get_template_directory_uri();
// Get includes path
$this->_inc_dir = $this->_tpl_dir . \'/inc\';
if ( !defined( \'BUDDYBOSS_DEBUG\' ) ) {
define( \'BUDDYBOSS_DEBUG\', false );
}
if ( !defined( \'THEME_TEXTDOMAIN\' ) ) {
define( \'THEME_TEXTDOMAIN\', $this->lang_domain );
}
if ( !defined( \'THEME_HOOK_PREFIX\' ) ) {
define( \'THEME_HOOK_PREFIX\', \'buddyboss_theme_\' );
}
}
最合适的回答,由SO网友:Jacob Peattie 整理而成
子主题加载在父主题之前。这就是为什么您能够替换function_exists()
. 主题使用时function_exists()
他们利用了先加载子主题的事实,让子主题定义具有相同名称的函数,而不会引发错误。
出现错误的原因是,在父主题加载和定义常量之前,您正在子主题中使用此常量。但是,您的父主题正在使用defined()
以与相同的方式function_exists()
要允许您自己在子主题中定义此常量,请执行以下操作:
if ( !defined( \'THEME_HOOK_PREFIX\' ) ) {
define( \'THEME_HOOK_PREFIX\', \'buddyboss_theme_\' );
}
所以你需要做的就是在你的孩子主题中定义这一点:
define( \'THEME_HOOK_PREFIX\', \'buddyboss_child_theme_\' );
现在,您可以在子主题中使用它,父主题将获取新值并使用它。