将代码段从父主题覆盖到子主题

时间:2017-09-15 作者:MKS

我正在尝试覆盖子主题中的以下代码。我想加载文件/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\',
    ));
}

2 个回复
最合适的回答,由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 );
    ?>
这应该让你开始。。。

SO网友:MKS

上述评论肯定有帮助。声明位于acf\\u add\\u options\\u page函数的不同文件中,您需要包含该文件的子函数。php文件。

我只是从父函数复制了if块中的代码。php文件并将其粘贴到子函数中。php文件,包括必需的文件。这对我有用。

希望它也能帮助你。

谢谢

结束

相关推荐

加载CSS文件的子主题中的Functions.php中断网站

我创建了一个子主题并创建了一个函数。子主题目录中也具有所需样式的php文件。css文件和我要加载的单独自定义css文件。这是我使用的代码:<? php add_action(\'wp_head\', \'add_landing_css\'); function add_landing_css() { wp_enqueue_style(\'landing_css\', get_stylesheet_directory_uri().\'/landing.cs