通过子函数.php在父主题文件中添加或修改

时间:2018-04-12 作者:japanworm

这是我第一次使用儿童主题。一切正常,但我目前已将三个文件从父主题复制到子主题,并在那里进行了修改。我知道这不是一个好主意,因为一旦更新了父主题,我可能会遇到麻烦。

我确信应该有一种方法可以使用子主题的功能修改这些文件。php。我只是不知道该怎么办。

我有头球。php和页脚。php,我只想在父主题的等效项中添加一些代码。但我如何确定它将添加到文件中的什么位置?是否有办法通过函数执行此操作。php?

如果footer.php 我只想在正文结束标记之前添加Google Analytics脚本代码:

<script>
// Set to the same value as the web property used on the site
var gaProperty = \'UA-xxx\';

// Disable tracking if the opt-out cookie exists.
var disableStr = \'ga-disable-\' + gaProperty;
if (document.cookie.indexOf(disableStr + \'=true\') > -1) {
  window[disableStr] = true;
}

// Opt-out function
function gaOptout() {
  document.cookie = disableStr + \'=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/\';
  window[disableStr] = true;
}
</script>

<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push([\'_setAccount\', \'UA-xxx\']);
_gaq.push([\'_gat._anonymizeIp\']);
_gaq.push([\'_trackPageview\']);

(function() {
var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>
在以下情况下:header.php 我想添加以下三行:

<meta name="alexaVerifyID" content="xxx" />
<meta name="wot-verification" content="xxx"/> 
<link rel="author" href="https://plus.google.com/xxx/posts" />
应在此处添加:

<head>

<meta http-equiv="Content-Type" content="<?php bloginfo(\'html_type\'); ?>; charset=<?php bloginfo(\'charset\'); ?>" />
<meta name="viewport" content="user-scalable=yes, width=device-width, initial-scale=1.0, maximum-scale=1, minimum-scale=1">
(此处添加)

<!--[if lt IE 9]>
    <script src="<?php echo get_template_directory_uri(); ?>/js/html5.js"></script>
<![endif]-->

<?php wp_head(); ?>
</head>
最后,最复杂的一个(不确定是否可以通过function.php实现)是404.php 文件在父文件中,我要替换以下内容:

<p><?php echo __vce( \'404_text\'); ?></p> 

                <?php  
                    if(has_nav_menu(\'vce_404_menu\')) { 
                            wp_nav_menu( array( \'theme_location\' => \'vce_404_menu\', \'menu\' => \'vce_404_menu\', \'menu_class\' => \'vce-404-menu\', \'menu_id\' => \'vce_404_menu\', \'container\' => false ) ); 
                    }  
                ?> 
使用这段代码:

<img src="https://xxx.png" alt="404 image" />

<br /><br />
                <?php 
                    if(has_nav_menu(\'vce_404_menu\')) {
                            wp_nav_menu( array( \'theme_location\' => \'vce_404_menu\', \'menu\' => \'vce_404_menu\', \'menu_class\' => \'vce-404-menu\', \'menu_id\' => \'vce_404_menu\', \'container\' => false ) );
                    } 
                ?>
<br /><br />
    <p>One last thing, if you\'re feeling so kind, please <a href="https://xxx/contact/">tell me</a> about this error, so that I can fix it. Thanks!</p> 
这可能吗?或者,对于这些微小的更改,您是否会建议我复制(&;每次更新主题后都粘贴它们?

提前非常感谢!

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

但我目前已经将三个文件从父主题复制到子主题,并在那里修改了它们。我知道这不是一个好主意,因为一旦更新了父主题,我可能会遇到麻烦。

错误的这就是为什么人们should 使用子主题。如果父主题已更新,则将保留在子主题中进行的自定义。只有在对父主题进行自定义时,如果更新父主题,这些自定义才会丢失。

正如@WebElaine所说,有时您可以在子主题中覆盖父主题的某些特性或功能functions.php 但这取决于具体情况以及父主题的编码方式。

通过阅读的目的和用法,您可以了解更多Hooks, ActionsFilters 在WordPress Codex词汇表中,可以通过谷歌搜索找到许多示例。

有些主题还使用可以在子主题中重写的函数。通过使用名为function_exists(). 举个简单的例子,父主题中可能有一个函数,如:

if ( ! function_exists( \'simple_function\' ) :
    function simple_function(){
        echo \'Hello\';
    }
endif;
要在子主题中重写此函数,只需在子主题中创建一个同名函数,如下所示:

function simple_function(){
    echo \'Goodbye\';
}
The404.php 文件更改需要使用模板覆盖来完成,就像您已经做的那样。但是,您可以取消header.phpfooter.php 文件,而是使用WordPress的挂钩。

对于需要添加的头代码,只需在子主题中创建自己的函数functions.php 将HTML添加到wp_head() 函数(位于header.php 文件),因为有一个“钩子”(在WordPress函数中wp_head() 有挂钩:do_action( \'wp_head\' )). 请参见下面的示例,您可以将其添加到子主题中functions.php 文件:

function my_add_to_head(){
    echo \'<meta name="alexaVerifyID" content="xxx" />\';
    echo \'<meta name="wot-verification" content="xxx"/>\';
    echo \'<link rel="author" href="https://plus.google.com/xxx/posts" />\';
}
add_action( \'wp_head\', \'my_add_to_head\' );
将此代码添加到子主题后functions.php 文件,您将不再需要header.php 将子主题中的文件作为模板替代。

对于需要添加到footer.php 文件,因为有一个称为wp_footer 你可以使用例如。

function my_add_to_footer(){
    ?>
    <script>
    // Set to the same value as the web property used on the site
    var gaProperty = \'UA-xxx\';

    // Disable tracking if the opt-out cookie exists.
    var disableStr = \'ga-disable-\' + gaProperty;
    if (document.cookie.indexOf(disableStr + \'=true\') > -1) {
        window[disableStr] = true;
    }

    // Opt-out function
    function gaOptout() {
        document.cookie = disableStr + \'=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/\';
        window[disableStr] = true;
    }
    </script>

    <script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push([\'_setAccount\', \'UA-xxx\']);
    _gaq.push([\'_gat._anonymizeIp\']);
    _gaq.push([\'_trackPageview\']);

    (function() {
        var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
        ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
        var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);
    })();
    </script>
    <?php
}
add_action( \'wp_footer\', \'my_add_to_footer\' );

结束

相关推荐

Child-theme breaks site

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