在子主题中覆盖functions.php中包含的函数

时间:2014-08-07 07:09:18

标签: php wordpress wordpress-theming

我试图覆盖父主题functions.php中包含的函数。

我试图覆盖的函数生活在functions / widget-fblikebox.php

我父母的函数中有什么.php:

include("functions/widget-fblikebox.php");

functions / widget-fblikebox.php以此开头:

add_action('widgets_init', 'facebook_like_load_widgets');

function facebook_like_load_widgets()
{
    register_widget('Facebook_Like_Widget');
}

class Facebook_Like_Widget extends WP_Widget {

我尝试了这个answer,这就是我所做的:

我在我的孩子主题中创建了functions.php,然后我进入了这里:

<?php
// Add Facebook Like box Widget
include("functions/widget-fblikebox.php");
?>

我在我的子主题文件夹functions / widget-fblikebox.php中创建了一个文件,其中包含以下内容:

add_action( 'init', 'remove_facebook_like_load_widgets' );

function remove_facebook_like_load_widgets() {
    remove_action('widgets_init', 'facebook_like_load_widgets' );
    add_action( 'init', 'custom_facebook_like_load_widgets' );
}

function custom_facebook_like_load_widgets()
{
    register_widget('Facebook_Like_Widget');
}

class Facebook_Like_Widget extends WP_Widget {

但是我收到了错误

Fatal error: Cannot redeclare class Facebook_Like_Widget in /home/electronhe/over9000/www/wp-content/themes/truepixel/functions/widget-fblikebox.php on line 125

我广泛搜索了这篇文章,并尝试了我想到的所有内容来解决这个问题。我尝试在我的子主题中重命名该类,在我的子主题functions.php中使用include_once等,但无济于事。我可以请你详细说明这一点,非常感谢。我首先搞乱这个的原因是我想改变我的主题(来自mythemeshop,TruePixel)附带的Facebook类似框的本地化,但似乎没有设置数据库中的语言环境而我想到的唯一改变这种想法的想法是重新定义类并在与FB谈话的iframe的URL中硬编码正确的区域设置。

1 个答案:

答案 0 :(得分:2)

从技术上讲,您无法覆盖函数声明。一旦宣布,那就是它。

为了解决这个问题,您可以要求父主题作者支持函数重写(它们将在if语句中包装它们的函数声明,以检查函数是否已被声明)或者您可以手动修改它们的文件(但要小心更新父主题。