【问题标题】:How can I override function of plugin 's class in Wordpress ?如何在 Wordpress 中覆盖插件类的功能?
【发布时间】:2016-10-20 03:42:59
【问题描述】:

我想重写插件事件管理器的 EM_Tickets 类中的函数 get_post()

class EM_Tickets extends EM_Object implements Iterator{
/**
 * Retrieve multiple ticket info via POST
 * @return boolean
 */
function get_post(){
    // something here

    return apply_filters('em_tickets_get_post', count($this->errors) == 0, $this);
    }
}

所以我创建了自己的插件并在下面添加了代码但没有运气,虽然我阅读并遵循了一些手册,例如 Is it possible to replace a function within a PHP class?

,但不知道为什么它不起作用
class EM_Tickets_Child extends EM_Tickets implements Iterator{

    public function get_post(){
        file_put_contents('log.txt', 'in child class', FILE_APPEND | LOCK_EX);
        //something here
    }           
}

【问题讨论】:

    标签: php wordpress overriding


    【解决方案1】:

    您在原始代码上有一个过滤器 (apply_filters)。您只需要挂钩并创建一个函数来覆盖返回值,无需扩展插件类,但这是另一种方式。

    add_action('em_ticket_get_posts', array('Em_tickets', 'my_new_get_post), 10, 2);
    

    【讨论】:

    • 我没有尝试过你的建议,但我通过添加一个带有钩子“add_action('em_tickets_get_post_pre', 'save_em_ticket_item');”的函数来解决它进入主题的文件功能
    猜你喜欢
    • 2016-01-13
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2022-10-14
    • 2015-01-06
    相关资源
    最近更新 更多