Vì vậy, tôi có mã plugin nàyWordPress - xóa tác vụ được định nghĩa trong lớp Plugin
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 }
}
Tôi muốn thay đổi nội dung của gridlist_toggle_button chức năng. Đây là cách tôi dự định thay đổi nội dung của hàm đó. Cũng giống như viết một hàm khác với hầu như cùng một html như là một bản gốc nhưng bit của những thay đổi của tôi. Một cái gì đó như
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 }
}
Bằng cách đó, tôi sẽ không cần phải thay đổi các tập tin trực tiếp cắm
Cho rằng, tôi đang cố gắng để loại bỏ hành động liên quan của nó.
add_action('woocommerce_before_shop_loop', array($this, 'gridlist_toggle_button'), 30);
Để tôi có thể sử dụng mã của riêng mình. Nhưng tôi dường như không thể loại bỏ hành động này. Tôi đã thử điều này cho đến nay.
Phương pháp 1:
global $WC_List_Grid ;
remove_action('woocommerce_before_shop_loop', array($WC_List_Grid, 'gridlist_toggle_button'), 100);
Cách 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');
Phương pháp 3
remove_action('woocommerce_before_shop_loop', array('WC_List_Grid', 'gridlist_toggle_button'), 100);
Không ai trong số họ có vẻ làm việc.
Với một chút suy nghĩ, tôi nghĩ có thể có hai nguyên nhân có thể xảy ra.
- Không hoạt động vì hành động tôi muốn xóa không được gắn trực tiếp vào móc. Hành động của nó bên trong hành động.
- Tôi đang cố gắng chặn đầu ra của gridlist_toggle_button qua functions.php. Nhưng nếu các plugin tải trước functions.php thì chức năng bị chặn đi đã được gọi và do đó nó luôn hiển thị đầu ra.
Tôi không tốt với OOP. Ai đó có thể giúp tôi không?
Vui lòng xem lại câu hỏi được cập nhật của tôi. Và tôi đã thử phương pháp này và nó cũng không hoạt động. –
Bạn đã thử ưu tiên 30 hoặc 100 chưa? Bạn đã thử không có ưu tiên chưa? –
Đã thử với tất cả, 30 và 100 và không được ưu tiên. Tôi nghĩ rằng điểm của bạn "Plugins đang được nạp trước khi functions.php" là lý do. Bởi vì tôi đang cố gắng chặn đầu ra của gridlist_toggle_button. Nhưng như bạn đã gợi ý, nếu các plugin tải trước functions.php thì hàm đó đã được gọi và do đó nó luôn hiển thị đầu ra. –