php – WordPress – 删除插件类中定义的操作
所以我有这个插件代码
class WC_List_Grid { public function __construct() { add_action( 'wp',array( $this,'setup_gridlist' ),20); } function setup_gridlist() { add_action( 'woocommerce_before_shop_loop','gridlist_toggle_button' ),30); } function gridlist_toggle_button() {?> <nav class="gridlist-toggle"> <a href="#" id="grid" title="<?php _e('Grid view','woocommerce-grid-list-toggle'); ?>"><span class="dashicons dashicons-grid-view"></span> <em><?php _e( 'Grid view','woocommerce-grid-list-toggle' ); ?></em></a> <a href="#" id="list" title="<?php _e('List view','woocommerce-grid-list-toggle'); ?>"><span class="dashicons dashicons-exerpt-view"></span> <em><?php _e( 'List view','woocommerce-grid-list-toggle' ); ?></em></a> </nav> <?php } } 我想更改gridlist_toggle_button函数的内容. add_action('woocommerce_before_shop_loop','new_gridlist_toggle_button') function new_gridlist_toggle_button() {?> <nav class="gridlist-toggle"> <a href="#" class="grid-view" title="<?php _e('Grid view','woocommerce-grid-list-toggle' ); ?></em></a> <a href="#" class="list-view" title="<?php _e('List view','woocommerce-grid-list-toggle' ); ?></em></a> </nav> <?php } } 这样,我就不必直接更改插件文件了 为此,我试图删除其相关的行动. add_action( 'woocommerce_before_shop_loop',30); 所以我可以使用自己的代码.但我似乎无法删除此操作.到目前为止我已经尝试过了. 方法1: global $WC_List_Grid ; remove_action( 'woocommerce_before_shop_loop',array( $WC_List_Grid,100); 方法2: function remove_plugin_actions(){ global $WC_List_Grid ; remove_action( 'woocommerce_before_shop_loop',100); } add_action('init','remove_plugin_actions'); 方法3 remove_action( 'woocommerce_before_shop_loop',array( 'WC_List_Grid',100); 他们似乎都没有工作. 通过一些头脑风暴,我认为可能有两个可能的原因. >它不起作用,因为我要删除的动作不直接附加到钩子上.它的行动在行动中. 我根本不喜欢OOP.有人可以帮帮我吗?
每当$wc_lg = new WC_List_Grid()被实例化时,它将触发
wp 钩子.在设置全局WP类对象之后,实例$wg_lg将自己调用setup_gridlist().它将触发woocommerce_before_shop_loop钩子.每当发生这种情况时,$wg_lg将再次调用一个函数.即gridlist_toggle_button().
为什么不在插件中更改它?喜欢覆盖其中的所有内容.
你怎么知道$WC_List_Grid有它的名字?它只是一个类名.它可以在任何名称下实例化,如$foo或$bar. 我假设你在模板的functions.php文件中编码.在function.php和remove_action()只能在add_action()发生之后才能加载插件.
所以这应该只是为了删除动作,但是这有助于你改变函数内部的内容? : remove_action( 'woocommerce_before_shop_loop',array('WC_List_Grid','gridlist_toggle_button'),30 ); 请注意,您使用的是优先级100 编辑 我发现do_action(‘woocommerce_archive_description’)发生在archive-product.php和wc-template-functions.php,就在插件中执行woocommerce_before_shop_loop挂钩操作之前.试着用这个: function remove_plugin_actions(){ global $WC_List_Grid; remove_action( 'woocommerce_before_shop_loop',30); } add_action('woocommerce_archive_description','remove_plugin_actions'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- PHP和GD:PNG-24透明度问题
- 原来iTunes Connect 的 reject binary 改变为 remove this
- php – MySQL:ucs2_slovenian_ci到网页上的utf-8
- 求PHP数组最大值,最小值的代码
- PHP中date与gmdate的区别及默认时区设置
- php – gzinflate:max.空间,以避免内存不足?
- PHP加密3DES报错 Call to undefined function: mcrypt_modu
- php – geopip记录总是为空吗?
- php变量与数组的相互转换(extract)与(compact)
- PHP水印类,支持添加图片、文字、填充颜色区域的实现