这是我第一次使用儿童主题。一切正常,但我目前已将三个文件从父主题复制到子主题,并在那里进行了修改。我知道这不是一个好主意,因为一旦更新了父主题,我可能会遇到麻烦。
我确信应该有一种方法可以使用子主题的功能修改这些文件。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>
这可能吗?或者,对于这些微小的更改,您是否会建议我复制(&;每次更新主题后都粘贴它们?
提前非常感谢!
最合适的回答,由SO网友:Mat 整理而成
但我目前已经将三个文件从父主题复制到子主题,并在那里修改了它们。我知道这不是一个好主意,因为一旦更新了父主题,我可能会遇到麻烦。
错误的这就是为什么人们should 使用子主题。如果父主题已更新,则将保留在子主题中进行的自定义。只有在对父主题进行自定义时,如果更新父主题,这些自定义才会丢失。
正如@WebElaine所说,有时您可以在子主题中覆盖父主题的某些特性或功能functions.php
但这取决于具体情况以及父主题的编码方式。
通过阅读的目的和用法,您可以了解更多Hooks, Actions 和Filters 在WordPress Codex词汇表中,可以通过谷歌搜索找到许多示例。
有些主题还使用可以在子主题中重写的函数。通过使用名为function_exists()
. 举个简单的例子,父主题中可能有一个函数,如:
if ( ! function_exists( \'simple_function\' ) :
function simple_function(){
echo \'Hello\';
}
endif;
要在子主题中重写此函数,只需在子主题中创建一个同名函数,如下所示:
function simple_function(){
echo \'Goodbye\';
}
The
404.php
文件更改需要使用模板覆盖来完成,就像您已经做的那样。但是,您可以取消
header.php
和
footer.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\' );