首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在子主题中添加到functions.php不起作用

在子主题中添加到functions.php不起作用
EN

Stack Overflow用户
提问于 2018-12-14 05:35:31
回答 1查看 1.1K关注 0票数 0

我正在试着翻译我的博客上的一些文字,它恰好是用functions.php写的。我正在使用一个带有自己的functions.php的子主题,我已经在原始functions.php中添加了一些修改过的代码,没有任何问题。现在举个例子,我在原始的functions.php中有这样的代码:

代码语言:javascript
复制
/**
 * ----------------------------------------------------------------------------------------
 * 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中添加了一些代码,我用同样的方法做了它,它起作用了-复制整个函数并将其添加到子主题中,编辑我需要编辑的内容,就这样。但这一次它不起作用了。

有人知道我做错了什么吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-14 05:52:32

根据函数在父主题中的编写方式,您当然可以覆盖父函数。在父functions.php文件中,它是一个可插拔的函数(看起来像这样吗)?

代码语言:javascript
复制
if ( ! function_exists( 'infinity_search_form' ) ) {
    function infinity_search_form( $value = false ) {

如果它看起来像这样,那么只需在你的子主题functions.php文件中声明一个新的函数副本。

如果它不是这样显示的,那么这个函数就是不可插拔的,你必须用另一种方式初始化它。最好的方法是在父声明之后声明它(参见下面的示例):

代码语言:javascript
复制
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的说明,创建自己的函数,自己调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53770421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档