簡體   English   中英

如何從Wordpress父主題中聲明的php自定義類中重寫單個函數?

[英]How can I override a single function from a php custom class declared in a Wordpress parent theme?

我正在從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

我不一定推薦這樣做。但是,如果您具有對服務器的管理訪問權限並且可以安裝PECL擴展,則可以使用runkit_method_redefine()

否則,唯一可行的選擇是修改該主題。 您可以做的一件事是,只需將SpecialClass重命名為SpecialClassBase,然后將您的派生重命名為SpecialClass的原始名稱。

如果在文件末尾包含自己的定義,則無需更改其他任何內容。 它應該只是“工作”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM