正在删除从构造函数添加的操作

时间:2018-01-16 作者:saurav.rox

有没有办法从主题中删除通过构造函数中插件类添加的操作?示例:

class WP_Travel_Engine_Enquiry_Form_Shortcodes
{

    function __construct()
    {
        add_action(\'wp_travel_engine_enquiry_form\', array( $this, \'wpte_enquiry_form\' ));
    }
}
new WP_Travel_Engine_Enquiry_Form_Shortcodes;
那么我可以删除该操作吗wpte_enquiry_form 从…起wp_travel_engine_enquiry_form 通过主题?我无法这样做,因为创建对象时会立即添加动作。有可能吗?

谢谢你的时间!

1 个回复
最合适的回答,由SO网友:janh 整理而成

如果该类作为单例工作,并且有一个getInstance()方法(或类似方法)来检索实例,则可以删除该操作,方法与添加该操作的方式大致相同:

remove_action(\'wp_travel_engine_enquiry_form\', array( $instance, \'wpte_enquiry_form\' ));
编辑:我已经对此进行了更多的研究,您可以通过查看$wp_filters (全局变量,因此使用global $wp_filters; 在函数中使用它之前)。

add_action("init", function() {
    global $wp_filter;
    foreach($wp_filter["wp_travel_engine_enquiry_form"][10] as $id => $filter) {
    if(is_array($filter["function"]) && && count($filter["function"]) == 2 &&
        get_class($filter["function"][0]) == "WP_Travel_Engine_Enquiry_Form_Shortcodes" &&
        $filter["function"][1] == "wpte_enquiry_form") {
            remove_action("wp_travel_engine_enquiry_form", $id);
        }
    }
}, 99);
这段代码查看的是wp_travel_engine_enquiry_form 钩10是默认优先级,但您也可以轻松迭代其他优先级。

然后查看每个单独的过滤器是否为callable 一个对象和一个方法,以及该对象是否为我们要删除的正确类型和正确方法。因为当时的ID是已知的,remove_action 用于操纵$wp_filter.

这不是最干净的方式,但激烈的时代要求采取激烈的措施。

结束

相关推荐

Wordpress Admin Tooltip hooks

我想知道是否有一种方法可以使用Wordpress管理工具提示(灰色和蓝色),当你更新你的Wordpress(3.x)时会显示这些提示。显示新功能。谢谢