我的父主题在一个函数中有一些bug,我想在子主题中重写它。问题是它既不可插拔也不可挂接。定义如下:
// no if(!function_exists())
function parentThemeFunction() {
//some bad coding
}
// no add_action
仅此而已。它未在函数中定义。php,但在“parentTheme/directory/file.php”中
所以我听说了“runkit\\u function\\u redefine”和“runkit\\u function\\u rename”,但这意味着我必须在服务器上实现“runkit”库。
到目前为止,我唯一的选择是在父主题中编辑原始函数。有可能在下一次主题更新时看到我的代码被覆盖。
以下是不同的呼叫:
// parentTheme/includes/profiles.php
class Fre_ProfileAction extends AE_PostAction {
function __construct( $post_type = \'fre_profile\' ) {
// some unrelevant code
$this->add_ajax( \'ae-profile-sync\', \'sync_post\' );
}
function sync_post() {
// bad coding that i have to override
}
}
// parentTheme/functions.php
class ET_FreelanceEngine extends AE_Base {
function __construct() {
// some unrelevant code
$this->profile_action = new Fre_ProfileAction();
}
}
global $et_freelance;
add_action( \'after_setup_theme\', \'et_setup_theme\' );
function et_setup_theme() {
global $et_freelance;
$et_freelance = new ET_FreelanceEngine();
// some unrelevant code
}
Fre\\u ProfileAction扩展了AE\\u PostAction,它扩展了自身的AE\\u基类。
class AE_Base {
public function add_ajax($hook, $callback, $priv = true, $no_priv = true, $priority = 10, $accepted_args = 1) {
$this->add_action(self::AJAX_PREFIX . $hook, $callback, $priority, $accepted_args);
}
public function add_action($hook, $callback, $priority = 10, $accepted_args = 1) {
add_action($hook, array(
$this,
$callback
) , $priority, $accepted_args);
}
}
有什么想法吗?