0

我正在从 Wordpress 主题创建一个子主题。父主题严重依赖一个自定义类,然后在 functions.php 文件中实例化,如下所示:

<?php
require_once (TEMPLATEPATH . '/advanced/specialclass.php');

$specialclass = new SpecialClass();
if(!function_exists('lets_go')) {
    function lets_go(){
        global $specialclass;
        $specialclass->start();
    }
}

lets_go();
?>

我需要在我的子主题中覆盖该类中的一个函数,我试图通过为子主题创建一个 functions.php 文件来做到这一点。我尝试了以下几种变体:

<?php
require_once (TEMPLATEPATH . '/advanced/specialclass.php');
require_once (STYLESHEETPATH . '/advanced/specialclassextended.php');

global $specialclass;
$specialclass = new SpecialClassExtended();

function lets_go(){
    global $specialclass;
    $specialclass->start();
}

?>

也许我的问题与对 PHP 全局变量的理解不够好有关,但不管是什么,我都被卡住了。父主题文件中有很多对 $specialclass 的引用,因此通过在子主题中创建新模板文件来替换它们是不切实际的。我真的需要用我的扩展类的实例替换那个全局。这可能吗?我究竟做错了什么?在我到目前为止的所有搜索中,这是我发现的最密切相关的信息,但不幸的是它没有回答我的具体问题:

https://wordpress.stackexchange.com/questions/30728/using-classes-instead-of-global-functions-in-functions-php

4

1 回答 1

0

我不一定推荐这个...但是,如果您对服务器具有管理访问权限并且可以安装 PECL 扩展,则可以使用runkit_method_redefine()

否则,您唯一可行的选择是修改该主题。您可以做的一件事就是简单地将 SpecialClass 重命名为 SpecialClassBase 之类的名称,并将派生的名称重命名为 SpecialClass 的原始名称。

如果您在文件末尾包含自己的定义,则不需要更改任何其他内容。它应该只是“工作”。

于 2013-03-06T06:25:15.973 回答