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
1 ответов
, когда $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
.
я предполагаю, что вы кодируете в функциях.php-файл вашего шаблона. Плагины загружаются перед функциями.php и remove_action()
может работать только после add_action()
happend.
важно: чтобы удалить крюк, $function_to_remove и $priority аргументы должны совпадать при добавлении крючка. Это касается обоих фильтры и действия. В случае неудачи удаления предупреждение не выдается.
так это должно работать только для удаления, но как это поможет вам изменить контент внутри функции? :
remove_action(
'woocommerce_before_shop_loop',
array('WC_List_Grid', 'gridlist_toggle_button'),
30
);
обратите внимание, что вы использовали приоритет 100
редактировать
узнал, что do_action('woocommerce_archive_description')
происходит архив-продукта.в PHP и wc-template-функции.в PHP перед woocommerce_before_shop_loop
действия крючка выполняются в плагине. Попробуйте использовать это:
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');