我的WP主题的父functions.php有
require get_template_directory() . '/inc/template-tags.php';
该文件中有一个我想更改的函数。问题是那里还有很多我不想碰的其他功能。我可以将整个文件复制到子主题中并取消注册/取消该文件的序列。我想知道是否有更简单的方法。
在 template-tags.php 中调用我想要更改值的函数
function web2feel_content_nav( $nav_id ) {
...我想在此处更改的内容
endif; // web2feel_content_nav
它是在我的 single.php 文件中使用
调用的<?php web2feel_content_nav( 'nav-below' ); ?>
更改父文件很容易,但我不想触及父文件,所以我只想覆盖该函数并将其更改为新的/固定的函数。
最佳答案
您不能删除函数,也不能重新声明它们,因为这将导致 fatal error 。
不幸的是,您没有提供有关您的问题的更多背景信息,因此我无法为您提供确切的解决方案。基于此,针对该问题提出了三种解决方案
解决方案 1
这是最快、最简单的解决方案,但基于以下事实:父主题的函数应包装在以下条件中
if ( !function_exists( 'NAME_OF_FUNCTION' ) )
如果是这种情况,您只需将父函数按原样复制到子主题中,无需条件语句,进行更改即可开始。这是唯一一次可以重新声明与上述条件相同的函数,首先检查子主题中是否存在同名函数,如果存在,则简单地忽略并跳过父函数
解决方案2
这也非常快速和简单,并且依赖于过滤器。如果父主题具有内置过滤器,您可以通过提供的过滤器简单地更改功能。在您的子主题中,您可以简单地创建一个函数来更改过滤器,然后将其 Hook 到适当的过滤器以更改函数的输出
解决方案 3
这是不满足上述条件的努力解决方案。这是你最后也是唯一的手段。
你应该在这里做的是
将要修改的父函数复制到您的子主题,然后将该函数重命名为适合您的任何唯一名称
根据需要修改此函数并保护它
您现在需要将受影响的模板复制到您的子主题,在您的例子中为
single.php
。在这些模板中,您需要用新创建的函数替换旧函数的所有实例并保护它们
Wordpress 现在将加载您的子主题中的模板(在您的情况下为子 single.php
)而不是父模板。这将确保页面加载了您新修改的函数
关于javascript - "Un-require"一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743018/