Więc mam ten kod wtyczkiWordPress - usuń działanie zdefiniowane w klasie wtyczki
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 }
}
Chcę zmienić treść gridlist_toggle_button funkcji. W ten sposób planuję zmienić zawartość tej funkcji. Podobnie jak przy pisaniu innej funkcji z prawie takim samym html jak oryginalny, ale bitami moich zmian. Coś jak
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 }
}
w ten sposób, że nie będzie musiał zmieniać wtyczki plików bezpośrednio
za to, staram się usunąć powiązane z nim działania.
add_action('woocommerce_before_shop_loop', array($this, 'gridlist_toggle_button'), 30);
Aby móc używać własnego kodu. Ale nie mogę usunąć tej akcji. Próbowałem tego do tej pory.
Metoda 1:
global $WC_List_Grid ;
remove_action('woocommerce_before_shop_loop', array($WC_List_Grid, 'gridlist_toggle_button'), 100);
Metoda 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');
Metoda 3
remove_action('woocommerce_before_shop_loop', array('WC_List_Grid', 'gridlist_toggle_button'), 100);
Żaden z nich nie wydaje się działać.
Przy odrobinie "burzy mózgów" myślę, że mogą istnieć dwie możliwe przyczyny.
- Nie działa, ponieważ akcja, którą chcę usunąć, nie jest bezpośrednio podłączona do haka. Jego działanie w akcji.
- Próbuję zablokować wyjście z gridlist_toggle_button przez functions.php. Ale jeśli wtyczki ładują się przed funkcją functions.php, to funkcja, która ma zostać zablokowana, jest już wywoływana i dlatego zawsze pokazuje wynik.
Nie jestem w ogóle dobra w OOP. Czy ktoś mógłby mi pomóc?
Proszę przejrzeć moje zaktualizowane pytanie. I już wypróbowałem tę metodę i ona też nie działa. –
Czy próbowałeś z priorytetem 30 lub 100? Czy próbowałeś bez żadnego priorytetu? –
Próbowano z wszystkimi, 30 i 100 i bez priorytetu. Myślę, że twój punkt "Wtyczki są ładowane przed funkcjami.php" jest powodem. Ponieważ próbuję zablokować wyjście z gridlist_toggle_button. Ale jak już sugerowałeś, jeśli wtyczki ładują się przed functions.php, to ta funkcja jest już wywoływana i dlatego zawsze pokazuje wynik. –