WordPress的 - 删除动作插件
中定义所以我有这个插件代码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', array($this, '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功能的内容。 这是我计划如何更改该功能的内容。就像使用与原始HTML几乎相同的html编写另一个函数,但是我的更改有点不同。像
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'); ?>"><span class="dashicons dashicons-grid-view"></span> <em><?php _e('Grid view', 'woocommerce-grid-list-toggle'); ?></em></a>
<a href="#" class="list-view" 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 }
}
个什么东西,我不会改变插件文件直接
对于这一点,我想删除其相关的行动。
add_action('woocommerce_before_shop_loop', array($this, 'gridlist_toggle_button'), 30);
这样我可以使用我自己的代码。但我似乎无法删除此操作。到目前为止,我已经尝试过了。
方法1:
global $WC_List_Grid ;
remove_action('woocommerce_before_shop_loop', array($WC_List_Grid, 'gridlist_toggle_button'), 100);
方法2:
function remove_plugin_actions(){
global $WC_List_Grid ;
remove_action('woocommerce_before_shop_loop', array($WC_List_Grid, 'gridlist_toggle_button'), 100);
}
add_action('init','remove_plugin_actions');
方法3
remove_action('woocommerce_before_shop_loop', array('WC_List_Grid', 'gridlist_toggle_button'), 100);
他们都不似乎工作。
经过一番头脑风暴,我认为可能有两个原因。
- 它不工作,因为我想删除的操作不直接附加到钩子上。其行动内的行动。
- 我想通过functions.php阻止gridlist_toggle_button的输出。但是,如果插件在functions.php之前加载,那么被阻止的函数已被调用,因此它总是显示输出。
我根本不适合OOP。有人可以帮我吗?
每当$wc_lg = new WC_List_Grid()
被实例化,它将触发wp
挂钩。在全局WP类对象建立之后,实例$wg_lg
将自行调用setup_gridlist()
。它会触发woocommerce_before_shop_loop
挂钩。每当发生这种情况时,$wg_lg
将自行调用一个函数。即gridlist_toggle_button()
。
我想改变gridlist_toggle_button功能
为什么不改变它里面的插件的内容?像重写里面的所有东西。
global $ WC_List_Grid;
你怎么知道$WC_List_Grid
有它的名字?它只是一个类名。它可以用任何名称例如$foo
或$bar
实例化。
我假设你正在编写模板的functions.php文件。在functions.php和remove_action()
之前插件正在加载,只能在发生add_action()
之后才能使用。
重要提示:要删除挂钩,添加挂钩时,$ function_to_remove和$ priority 参数必须匹配。这适用于 过滤器和操作。移除失败时不会发出警告。
所以这应该实际上只是用于去除行动工作,但如何,可以帮助你改变函数内的内容? :您正在使用的优先级100
编辑
我发现do_action('woocommerce_archive_description')
发生在archive-product.php和wc-template-functions.phpwoocommerce_before_shop_loop
前右钩拳动作在插件正在执行
remove_action(
'woocommerce_before_shop_loop',
array('WC_List_Grid', 'gridlist_toggle_button'),
30
);
通知。尝试使用此:
function remove_plugin_actions(){
global $WC_List_Grid;
remove_action('woocommerce_before_shop_loop', array($WC_List_Grid, 'gridlist_toggle_button'), 30);
}
add_action('woocommerce_archive_description','remove_plugin_actions');
请检查我更新的问题。而且我已经尝试过这种方法,它也无法工作。 –
你试过优先考虑30还是100?你有没有尝试过没有优先权? – 2016-04-15 07:25:47
尝试所有,30和100,并没有优先权。我认为你的观点“插件正在加载之前functions.php”是原因。因为我试图阻止gridlist_toggle_button的输出。但正如你所建议的,如果插件在functions.php之前加载,那么该函数已经被调用,因此它总是显示输出。 –