Так у меня есть этот плагин код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, что и исходный, но бит моих изменений. Что-то вроде
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);
Ни один из них не похоже на работу.
С небольшим количеством мозгового штурма, я думаю, может быть две возможные причины.
- Не работает, потому что действие, которое я хочу удалить, напрямую не прикреплено к крюку. Его действие внутри действия.
- Я пытаюсь заблокировать вывод gridlist_toggle_button через functions.php. Но если плагины загружаются до functions.php, то функция, которую нужно заблокировать, уже вызывается и, следовательно, она всегда показывает результат.
Я не очень хорошо знаком с ООП. Может кто-нибудь, пожалуйста, помогите мне?
Просмотрите мой обновленный вопрос. И я уже пробовал этот метод, и он тоже не работает. –
Вы пробовали с приоритетом 30 или 100? Вы пробовали без приоритета? –
Пробовал все, 30 и 100 и без приоритета. Я думаю, что ваша точка «Плагины загружаются до того, как функции.php» являются причиной. Потому что я пытаюсь заблокировать вывод gridlist_toggle_button. Но, как вы предположили, если плагины загружаются до functions.php, то эта функция уже вызывается и, следовательно, выводит вывод всегда. –