当我们将覆盖文件.php添加到子主题中时,是否需要更改子函数.php以要求/包含子目录文件

时间:2015-11-26 作者:PIp 1

对于子主题,我们应该离开父函数。并使用子函数对其进行扩展。php。但是,父功能。php通常定义一整批包含/需要文件,这些文件引用父目录中的文件。

我们是否需要记住在我们的孩子功能中超越这些。php每次我们创建一个子项时。覆盖父级的php?还是wordpress在更深层次上解决了覆盖问题?子功能。php在父函数之前运行。php因此,如果要求从不链接2个同名文件,即使它们位于不同的目录中,则将以独占方式选择子版本。否则,我们最终将链接子php和父php,并陷入正确的错误混乱。

1 个回复
SO网友:s_ha_dum

好的,我想再次检查的第一件事是,不需要对父PHP进行任何修改,只需在子目录中创建一个名称重复的PHP,它会完全覆盖父文件?

不可以。您不能创建同名的主题。您可以使用您选择的任何名称创建主题,并在style.css 文件指向父级。

/*
 Theme Name:   Twenty Fifteen Child
 Theme URI:    http://example.com/twenty-fifteen-child/
 Description:  Twenty Fifteen Child Theme
 Author:       John Doe
 Author URI:   http://example.com
 Template:     twentyfifteen
 Version:      1.0.0
 License:      GNU General Public License v2 or later
 License URI:  http://www.gnu.org/licenses/gpl-2.0.html
 Tags:         light, dark, two-columns, right-sidebar, responsive-layout, accessibility-ready
 Text Domain:  twenty-fifteen-child
*/
“模板”行是指向父级的行:

模板行与父主题的目录名相对应。我们示例中的父主题是215主题,因此模板将是215。您可能正在使用不同的主题,因此请进行相应的调整

https://codex.wordpress.org/Child_Themes#How_to_Create_a_Child_Theme

下一个

主样式表保留在父样式表中,但活动样式表将来自子样式表,该子样式表通常在子CSS的标题处导入父样式表。

对WordPress Core将读取基本主题数据的子样式表,但仍需要排队。父样式表将不会。这似乎是很常见的@import 家长,如果我没记错的话,抄本上曾建议采用这种方法。CSS@import 但这并不是加载样式表的有效方法。它在页面加载中引入了延迟,因为两个样式表无法同步加载。更好的方法是现在出现在Codex中的使用Coreenqueue 功能:

function theme_enqueue_styles() {

    $parent_style = \'parent-style\';

    wp_enqueue_style( $parent_style, get_template_directory_uri() . \'/style.css\' );
    wp_enqueue_style( \'child-style\',
        get_stylesheet_directory_uri() . \'/style.css\',
        array( $parent_style )
    );
}
add_action( \'wp_enqueue_scripts\', \'theme_enqueue_styles\' );
无论如何,返回到子主题。。。我不清楚的主要问题是,我们应该离开父函数。php in tact。但是,父功能。php通常定义一整批包含/需要文件,这些文件引用父目录中的文件。

这是正确的,这就是为什么您不处理该文件(以及其他内容)。

你需要记住在你的孩子的功能中超越这些吗。每次创建一个子项时使用php。php?

您只需要重写需要重写的文件和代码。其余部分根据父主题代码继续正常工作。这就是父/子关系的要点,也是该结构如此强大和灵活的原因。您可以利用一个主题的代码库来大大减少创建另一个主题所需的工作量。

子功能。php在父函数之前运行。php,所以重写应该可以工作。

在这里你必须小心。只能重写要重写的代码。在大多数情况下,这意味着通过get_template_part() 以及子主题敏感的相关函数和封装在if(!function_exists)\'...\')) 条件。代码包括通过PHP的requireinclude (或*_once 版本)无法重写。类似地,对于函数,您只能重写包装在if(!function_exists(\'...\')) as you see used in the Core pluggable.php file. 如果您试图通过提供自己的同名函数来覆盖任何其他函数,您将得到一个致命的PHP错误。PHP不允许多个同名函数。

你可能对this answer

相关推荐

Organize functions.php

组织职能的最佳方式是什么。php的性能?我有几个add\\u操作调用、几个add\\u主题支持、几个add\\u过滤器和4个附加函数。对于面包屑、样式表、注册菜单和小部件。我们是否需要遵守订单?例如,首先是所有add\\u过滤器函数,然后是add theme\\u support等。不确定添加代码是否相关,因为这是一个一般性问题。如果需要,我很乐意更新这篇文章。