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');