WordPress子主题PHP代码更改问题

时间:2018-05-16 作者:Terry

我对WordPress很陌生,昨天我尝试从AccessPress Dimit 1.1.9父主题创建我的第一个子主题(我通过使用子主题化插件作弊),对子主题的标题进行了轻微修改。php文件,它工作了!然而,这给我提出了一些问题:

我知道父主题更新不应该影响子主题修改,但这是否意味着如果我有标题。php在我的子主题(wp-content/themes/indightchild/header.php)中,则没有父主题更新到标题。php会影响我的网站吗?

修改小部件PHP代码是否也适用于此?

如果以上任何一个答案都是“是”,我如何能够轻松地从父主题更新到与我修改的PHP文件同名的PHP文件的其他增强/修复中获益,而不丢失我的更改?我想我想把我的更改与主题供应商的更改融合在一起,但我想这可能要求太多了。

激活子主题后,我注意到我对父主题所做的一些自定义消失了。(当我说“自定义”时,我指的是通过外观>自定义>标题设置>标题信息部分进行的更改,例如,不是对PHP代码的更改。)这是否正常?在创建/激活子主题时,我可能会丢失哪些父主题自定义?

我知道更新父主题不会触及子主题文件,但如果我甚至没有使用子主题,则通过WordPress更新主题将始终替换标题。php文件,或者只有在当前安装的版本发布后,该文件发生了更改,才会被替换?

我已经快速阅读了这篇文章https://codex.wordpress.org/Child_Themes 官方儿童主题文档。

为了让您了解我所说的更改类型,这里是未编辑的标题。我更改了php文件。我把第64行改成了“给我打电话”,而不是“呼叫支持”。

<?php
/**
 * The header for our theme.
 *
 * This is the template that displays all of the <head> section and everything up until <div id="content">
 *
 * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials
 *
 * @package enlighten
 */

?><!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( \'charset\' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="<?php bloginfo( \'pingback_url\' ); ?>">

<?php wp_head(); ?>
</head>

<body <?php body_class(); ?>>
<div id="page" class="site">
    <a class="skip-link screen-reader-text" href="#main"><?php esc_html_e( \'Skip to content\', \'enlighten\' ); ?></a>

    <header id="masthead" class="site-header" role="banner">

        <!-- Site Logo -->
        <div class="ak-container">
            <?php
                $enlighten_header_text = get_theme_mod(\'enlighten_header_text\');
                $enlighten_header_social_link_enable = esc_attr(get_theme_mod(\'enlighten_enable_heade_social_icon\'));
                if($enlighten_header_text || $enlighten_header_social_link_enable){
             ?>
            <div class="social_htext_wrap">
            <?php if($enlighten_header_text){ ?>
                <div class="header_text">
                    <span class="text_wrap"><?php echo esc_attr($enlighten_header_text); ?></span>
                </div>
            <?php } ?>
            <?php if($enlighten_header_social_link_enable){ ?>
                <div class="header_social_link">
                    <?php do_action(\'enlignten_header_social_link_action\'); ?>
                </div>
            <?php } ?>
            </div>
            <?php } ?>

            <div class="logo_info_wrap">
              <?php
              //Header Logo
              do_action(\'enlighten_action_custom_logo\');

                $enlighten_enable_info = esc_attr(get_theme_mod(\'enlighten_enable_header_info\'));
                if($enlighten_enable_info)
                  { ?>
                      <div class="header_info_wrap">
                          <?php $enlighten_number = get_theme_mod(\'enlighten_phone_header\');
                          if($enlighten_number){ ?>
                            <div class="phone_header wow fadeIn">
                                <div class="fa_icon"><i class="fa fa-phone" aria-hidden="true"></i></div>
                                <div class="title_phone">
                                    <span class="pnone_title"><?php esc_html_e(\'Call Support\',\'enlighten\'); ?></span>
                                    <span class="phone"><?php echo esc_attr($enlighten_number); ?></span>
                                </div>
                            </div>
                          <?php }
                          $enlighten_email = get_theme_mod(\'enlighten_email_header\');
                          if($enlighten_email){ ?>
                            <div class="email_header wow fadeIn">
                                <div class="fa_icon"><i class="fa fa-envelope-o" aria-hidden="true"></i></div>
                                <div class="title_email_wrap">
                                    <span class="title_email"><?php esc_html_e(\'Email Support\',\'enlighten\'); ?></span>
                                    <span class="email_address"><?php echo esc_attr($enlighten_email); ?></span>
                                </div>
                            </div>
                            <?php }
                          $enlighten_location = get_theme_mod(\'enlighten_localtion_header\');
                          if($enlighten_location){ ?>
                            <div class="location_header wow fadeIn">
                                <div class="fa_icon"><i class="fa fa-map-marker" aria-hidden="true"></i></div>
                                <div class="title_location_wrap">
                                    <span class="title_location"><?php esc_html_e(\'Location\',\'enlighten\'); ?></span>
                                    <span class="location"><?php echo esc_attr($enlighten_location); ?></span>
                                </div>
                            </div>
                          <?php } ?>
                      </div>
            <?php } ?>
            </div>
        </div>
        <?php
            $enlighten_alignment = get_theme_mod(\'enlighten_menu_alignment\',\'center\');
            $enlighten_position = get_theme_mod(\'enlighten_menu_style\',\'top\');
            if($enlighten_position == \'\'){$enlighten_position = \'top\';}
         ?>
        <nav id="site-navigation" class="main-navigation <?php if($enlighten_alignment || $enlighten_position){echo esc_attr($enlighten_alignment.\' \'.$enlighten_position);} ?>" role="navigation">
            <div class="ak-container">
                <div class="mb-ham">
                    <span></span>
                    <span></span>
                    <span></span>
                </div>
                <?php wp_nav_menu( array( \'theme_location\' => \'primary\', \'menu_id\' => \'primary-menu\', \'container_class\' => \'menu-menu-1-container mmenu-wrapper\' ) ); ?>
            </div>
        </nav><!-- #site-navigation -->

        <?php 
            if(is_home() || is_front_page()){
                $enlighten_slider_enable = get_theme_mod(\'enlighten_enable_slider\');
                if($enlighten_slider_enable){
                    do_action(\'enlighten_header_slider_action\');
                } 
        } ?>
    </header><!-- #masthead -->

    <!-- Header Banner -->
    <?php do_action(\'enlighten_header_banner\'); ?>

    <div id="content" class="site-content">

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

我知道父主题更新不应该影响子主题修改,但这是否意味着如果我有标题。php在我的子主题(wp-content/themes/indightchild/header.php)中,则没有父主题更新到标题。php会影响我的网站吗?

WordPress将始终加载子主题的标题。php在你的网站上,所以理论上不,它不会影响你。但是,不能保证父主题不会更改其标题中的某些内容。然后对依赖于该更改的其他文件进行更改。如果您的子主题的标题中没有反映出该更改,那么可能存在问题。

例如,假设父主题发布了一个更新,其中添加了<div> 标题中的元素。关闭的php</div>, 在页脚中。php。如果您只有标题的副本。php,然后是父主题的页脚。php将为未打开的元素提供一个结束标记。

这只是一个可能发生的事情的假设例子,但正因为如此,我建议在每次更新之前检查父主题的发行说明,以密切注意可能影响子主题的任何更改。

这是否适用于修改小部件PHP代码?

取决于父主题和您所谈论的小部件。WordPress只会自动处理属于template hierarchy 还有其他几个,比如header。php,页脚。php,注释。php和searchform。php。

函数或模板文件中的所有其他代码都要求父主题明确支持子主题。如果您不确定,您需要询问父主题的开发人员什么是子主题。

如果以上任何一个答案都是“是”,那么我如何能够轻松地从对PHP文件的父主题更新所附带的其他增强/修复中获益,而不丢失所做的更改?我想我想让我的更改与主题供应商所做的更改合并,但我想这可能要求太多了。

如果要采用父主题对已在子主题中替换的文件所做的任何更改(如上面的新div示例),则需要通过将新位复制到子主题文件或重做来手动合并这些更改。

激活子主题后,我注意到我对父主题所做的一些自定义消失了。(当我说“自定义”时,我指的是通过外观>自定义>标题设置>标题信息部分进行的更改,例如,不是对PHP代码的更改。)这是否正常?在创建/激活子主题时,我可能会丢失哪些父主题自定义?

主题mod是在Customiser中所做的更改通常保存为的内容,它是针对活动主题存储的,无论它是父主题还是子主题。切换到子主题时会丢失哪些自定义取决于父主题。

通过直接修改数据库,理论上可以将主题mod从父主题复制到子主题。查看的答案this question 获取执行此操作的方法。

我目前正在从事一个项目,希望在切换主题时,对一个子主题所做的自定义也应用于同一父主题的其他子主题。这需要我将自定义保存为选项,而不是主题mod。因此,如果这是您想要的,则需要父主题以相同的方式工作。

我知道更新父主题不会触及子主题文件,但如果我甚至没有使用子主题,则通过WordPress更新主题将始终替换标题。php文件,或者仅当该文件在发布当前安装的版本时出现更改后,才会被替换?

更新主题时,主题中的所有文件都将被替换,无论它们在新版本中是否实际更改。任何新文件也将被删除,任何删除的文件都将被重新添加。WordPress不支持“增量更新”。这就是为什么你会看到人们非常坚持不修改父主题。

结束

相关推荐

Child-theme breaks site

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