[英]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的引用,因此通過在子主題中創建新的模板文件來替換它們都是不切實際的。 我真的需要用我的擴展類的實例替換該全局變量。 這可能嗎? 我究竟做錯了什么? 到目前為止,在我的所有搜索中,這是我發現的最緊密相關的信息,但不幸的是,它無法回答我的特定問題:
我不一定推薦這樣做。但是,如果您具有對服務器的管理訪問權限並且可以安裝PECL擴展,則可以使用runkit_method_redefine() 。
否則,唯一可行的選擇是修改該主題。 您可以做的一件事是,只需將SpecialClass重命名為SpecialClassBase,然后將您的派生重命名為SpecialClass的原始名稱。
如果在文件末尾包含自己的定義,則無需更改其他任何內容。 它應該只是“工作”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.