我正在使用儿童主题。我想更改当前位于以下位置的文件:
mybasetheme>包含>sf内容显示>sf帖子布局。php
因此,我将完全相同的文件结构复制到我的子主题中,并将文件复制到:
mychildtheme>包含>sf内容显示>sf帖子布局。php
但它仍然默认为基本主题版本?
因为它在includes中,我想知道它是否与函数有关。php文件调用它。所以我创建了一个新的functions.php
“我的孩子”主题中的文件如下:
<?php
// Functions specific to child-theme
require_once( get_stylesheet_directory() . \'/includes/sf-content-display/sf-post-formats.php\' );
但现在我看到,这将永远无法作为基本主题功能。php已经调用它:
>include(SF_INCLUDES_PATH . \'/sf-content-display/sf-post-formats.php\');
所以我得到了这个错误:
无法在/Applications/MAMP/htdocs/syyco/wp-content/themes/flexform-child/includes/sf-content-display/sf-post-formats.php:15)中重新声明sf\\u-get\\u-post\\u-media()。php第36行
那我该怎么办?如果不编辑基础主题,我无法使子主题包含我的新文件,这会破坏拥有子主题的意义
SO网友:TheDeadMedic
当涉及到模板层次结构时,WordPress确实会在从主主题加载之前查看子主题目录。
对于所有其他非特定WordPress文件(如函数和第三方包含),如何加载它们完全取决于主题。
除非主题使用locate_template
要加载这些include,或者首先检查样式表(子主题)目录,子主题中的文件重写将无效。
如果函数包装在if ( ! function_exists( ...
, 然后作者允许重写,您只需在子主题的functions.php
.
如果不行,请查找do_action( ... )
或apply_filters( ... )
围绕您要更改的代码-这是您最后一次调用端口,用于覆盖子主题中的默认行为(签出the codex on hooks).
如果原始作者未实现上述任何一项,您可以从两个选项中选择一个-编辑原始主题,或联系作者并请求为子主题实现API。
SO网友:Pieter Goosen
简而言之,许多主题作者(我也这么做)倾向于在正常功能之外,将其功能组织在更小、更易于管理的文件中。php文件。它使定位某个功能变得更容易,还可以将与站点相关的某个方面的功能组织和分组在一起
快速示例:
在我的主题中,我有一个名为comments functions的文件。php。在这个文件中,我添加了与我的主题的注释部分相关的所有函数。
正如我所说,这一切都是为了组织代码,在一天结束时,他们希望查看2000行代码以获得特定功能。
然后将所有这些较小的函数文件调用到主函数中。php来注册它们以供使用。
创建子主题时,不需要保持此文件结构,只需在子主题的函数中添加/删除/修改函数即可。php。如果您真的只是创建一个具有一个函数的子主题,那么只需创建一个函数。php文件并将您的函数添加到其中
子主题的功能。php在父级之前加载,因此所有包装在if(!function_exists(\'function_name\'))
条件标记只能在子主题中复制和修改。此修改后的函数保留父函数的名称。父函数在应该加载时将被忽略。这是ONLY 重新声明函数的时间,即两个函数具有相同的名称。
如果父函数未包装,则有以下选择
如果函数是独立的,请将其复制到子主题,重命名并根据需要进行修改。这种类型的函数将在某个地方有回调,因此在父模板中查找该函数,将该特定模板复制到子主题,并用新的子函数替换父函数名称。无需担心删除父函数或对其执行任何操作。例如,如果父主题名称为parent_function()
它被称为索引。php,复制索引。php到您的子主题,并替换parent_function()
例如,使用您的子函数child_function()
如果某个函数连接到特定的操作或筛选器,则需要在注册后删除该函数。看见Removing Actions and Filters. 现在可以注册一个新函数,并将其挂接到父主题所挂接的同一个钩子上。请记住,优先级在这里非常重要,执行错误的顺序将失败。