我正在尝试覆盖子主题中的以下代码。我想加载文件/inc/soundtheme-admin.php
从子文件夹。我在中复制了相同的代码段child-theme/functions.php
还复制了inc/soundtheme-admin.php
. 我还更换了get_template_directory()
到get_stylesheet_directory()
但它仍在加载父文件。
请纠正我的错误。提前谢谢。
// Code snippet from parent-theme/functions.php
if( function_exists(\'acf_add_options_page\') ) {
require get_template_directory() . \'/inc/soundtheme-admin.php\';
$paper_themes =
acf_add_options_page(array(
\'page_title\' => \'\',
\'menu_title\' => \'Sound Theme\',
\'menu_slug\' => \'theme-general-settings\',
\'capability\' => \'edit_posts\',
\'redirect\' => false,
\'autoload\' => false,
\'icon_url\' => \'dashicons-carrot\'
));
acf_add_options_sub_page(array(
\'page_title\' => \'\',
\'menu_title\' => \'Sound Options\',
\'parent_slug\' => \'theme-general-settings\',
));
acf_add_options_sub_page(array(
\'page_title\' => \'\',
\'menu_title\' => \'Sound Layouts\',
\'parent_slug\' => \'theme-general-settings\',
));
acf_add_options_sub_page(array(
\'page_title\' => \'\',
\'menu_title\' => \'Sound Code\',
\'parent_slug\' => \'theme-general-settings\',
));
acf_add_options_sub_page(array(
\'page_title\' => \'\',
\'menu_title\' => \'Sound Supports\',
\'parent_slug\' => \'theme-general-settings\',
));
}
最合适的回答,由SO网友:dwcouch 整理而成
The functions in your child theme will be loaded before the functions in the parent theme. 这意味着,如果父主题和子主题都有名为my\\u function()的函数,它们执行类似的工作,则父主题中的函数将最后加载,这意味着它将覆盖子主题中的函数。
~Guide to Functions and Child themes
进一步:
Function Priority
如果您没有使用自己的父主题,或者您使用的是没有可插入功能的第三方主题,那么您需要另一种方法。
当你编写函数时,你可以给它们分配一个优先级,它告诉WordPress什么时候运行它们。在将函数添加到动作或过滤器挂钩时可以执行此操作。然后WordPress将按优先级升序运行附加到给定挂钩的函数,因此数字较高的函数将最后运行。
让我们想象一下父主题中的函数是不可插拔的,如下所示:
<?php
function parent_function() {
// Contents for your function here.
}
add_action( \'init\', \'parent_function\' );
?>
这意味着子主题中的函数如下所示:
<?php
function child_function() {
// Contents for your function here.
}
add_action( \'init\', \'child_function\', 15 );
?>
这应该让你开始。。。