包括子主题中的文件,在unctions.php中声明

时间:2014-08-28 作者:Francesca

我正在使用儿童主题。我想更改当前位于以下位置的文件:

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行

那我该怎么办?如果不编辑基础主题,我无法使子主题包含我的新文件,这会破坏拥有子主题的意义

3 个回复
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. 现在可以注册一个新函数,并将其挂接到父主题所挂接的同一个钩子上。请记住,优先级在这里非常重要,执行错误的顺序将失败。

SO网友:Shail

只需更改要编辑的函数。看见this post

1) 从父主题复制(完整)要重写的函数。

2) 将其粘贴到函数中。php在子主题文件夹的根目录中。If功能。php不存在,请创建它。

3) 将函数从parent\\u theme\\u函数重命名为child\\u theme\\u函数。

4) 停用父函数。

5) 激活子功能。

结束

相关推荐

WP-Includes不包含提要模板

我试图使用Wordpress 3.9为自定义帖子类型创建一个自定义提要模板,其中将包含一些自定义字段。其想法是使用此提要每月发送一封“新闻稿”类型的电子邮件,其中包含新添加产品的更新。问题是,当我想从当前提要复制代码作为自定义提要的起点时,我在任何地方都找不到这些页面。根据wordpress codex,这些应该在wp includes中找到。但他们不在那里。我又查了几个文件夹。。。没有什么在wp includes中,我有一个名为class的文件。喂养php。但开场白并没有给我任何提示。我需要从字段中删除