我正在试着翻译我的博客上的一些文字,它恰好是用functions.php写的。我正在使用一个带有自己的functions.php的子主题,我已经在原始functions.php中添加了一些修改过的代码,没有任何问题。现在举个例子,我在原始的functions.php中有这样的代码:
/**
* ----------------------------------------------------------------------------------------
* Custom Search Form
* ----------------------------------------------------------------------------------------
*/
function infinity_search_form( $value = false ) {
$placeholder = esc_html__( 'Search...', 'flexblog');
if ( $value === true ) {
$placeholder = esc_html__('Type and hit Enter...', 'flexblog');
}
$form = '<form method="get" action="'. esc_url( home_url( '/' ) ) .'" class="infinity-search" >';
$form .= '<input id="s" class="search_input" type="text" name="s" placeholder="'. $placeholder .'">';
$form .= '<button type="submit" class="submit button" name="submit" ><i class="fa fa-search" ></i></button>';
$form .= '</form>';
return $form;
}
add_filter( 'get_search_form', 'infinity_search_form' );
我想要更改的只是“键入并按回车键...”。我翻译文本,然后复制并粘贴子主题的functions.php中的所有内容,就像我在这里所做的那样(但使用翻译后的文本)。文本没有在博客上显示为翻译后的文本(显示相同),后端(WP仪表板)完全中断(它在XXX行上显示functions.php中有一些错误-原始的那个,尽管它是原样的-我在子主题的functions.php中修改的原始代码所在的位置)。
如果我简单地替换原始functions.php中的文本,它可以很好地工作。但出于显而易见的原因,我想使用子主题中的functions.php。
就像我提到的,我已经在子主题的functions.php中添加了一些代码,我用同样的方法做了它,它起作用了-复制整个函数并将其添加到子主题中,编辑我需要编辑的内容,就这样。但这一次它不起作用了。
有人知道我做错了什么吗?
谢谢!
发布于 2018-12-14 05:52:32
根据函数在父主题中的编写方式,您当然可以覆盖父函数。在父functions.php文件中,它是一个可插拔的函数(看起来像这样吗)?
if ( ! function_exists( 'infinity_search_form' ) ) {
function infinity_search_form( $value = false ) {
如果它看起来像这样,那么只需在你的子主题functions.php文件中声明一个新的函数副本。
如果它不是这样显示的,那么这个函数就是不可插拔的,你必须用另一种方式初始化它。最好的方法是在父声明之后声明它(参见下面的示例):
function infinity_search_form( $value = false ) {
$placeholder = esc_html__( 'Search...', 'flexblog');
if ( $value === true ) {
$placeholder = esc_html__('Type and hit Enter...', 'flexblog');
}
$form = '<form method="get" action="'. esc_url( home_url( '/' ) ) .'" class="infinity-search" >';
$form .= '<input id="s" class="search_input" type="text" name="s" placeholder="'. $placeholder .'">';
$form .= '<button type="submit" class="submit button" name="submit" ><i class="fa fa-search" ></i></button>';
$form .= '</form>';
return $form;
}
add_action( 'init', 'infinity_search_form', *A NUMBER LARGER THAN THE PARENT DECLARATION*);
下面是WordPress文档中可能会有帮助的部分:https://codex.wordpress.org/Child_Themes#Using_functions.php
这里有一个教程指南,可能会更详细地解释这一切:https://code.tutsplus.com/tutorials/a-guide-to-overriding-parent-theme-functions-in-your-child-theme--cms-22623
-更新2018-12-17 -如果父主题不支持重新声明方法,那么您可能必须尝试以下两种解决方案之一:
1)尝试删除父函数并在您的子主题functions.php文件中重新声明它:https://wordpress.stackexchange.com/questions/273941/how-to-override-parent-theme-function-through-the-child-theme#answer-273955
2)按照ArtisticPhoenix的说明,创建自己的函数,自己调用。
https://stackoverflow.com/questions/53770421
复制相似问题