I am creating a wordpress theme and i need to remove a wordpress action added from within a plugin class.
Here is the plugin's class and the action added in this class is
add_action( 'woocommerce_after_shop_loop_item', array( $this, 'add_compare_link' ), 20 );
And this is the action i need to remove in my theme.
After removing that action i need to add a new action on the same location. New action is:
function product_add_compare_link( $product_id = false, $args = array() ) {
extract( $args );
if ( ! $product_id ) {
global $product;
$product_id = isset( $product->id ) && $product->exists() ? $product->id : 0;
}
if ( empty( $product_id ) ) return;
$is_button = !isset( $button_or_link ) || !$button_or_link ? get_option( 'yith_woocompare_is_button' ) : $button_or_link;
$button_text = get_option( 'yith_woocompare_button_text', __( 'Compare', 'yit' ) );
$localized_button_text = function_exists( 'icl_translate' ) ? icl_translate( 'Plugins', 'plugin_yit_compare_button_text', $button_text ) : $button_text;
printf( '<a href="%s" class="%s" data-product_id="%d"><i class="icon-tasks"></i>%s</a>', $this->add_product_url( $product_id ), 'compare' . ( $is_button == 'button' ? ' add-comp' : '' ), $product_id, ( isset( $button_text ) && $button_text != 'default' ? $button_text : $localized_button_text ) );
}
add_action( 'woocommerce_after_shop_loop_item', 'product_add_compare_link', 20 );
Tried this solution and it removed that action perfectly but i cannot add a new one after that.
What i am doing is:
function kill_old_action() {
remove_anonymous_object_filter(
'woocommerce_after_shop_loop_item',
'YITH_Woocompare_Frontend',
'add_compare_link'
);
}
add_action( 'woocommerce_after_shop_loop_item', 'kill_old_action', 0 );
add_action( 'woocommerce_after_shop_loop_item', 'product_add_compare_link', 50 );
Any help will be highly appreciated.
Thank you
I wouldn't remove the action like that. The traditional way to remove an action that was added from a class is:
where the class variable is the instantiation of the class. How you refer to this depends on how the class has been instantiated in the plugin.
You can read about different ways of instantiating a class and the corresponding remove_action at http://jespervanengelen.com/different-ways-of-instantiating-wordpress-plugins/
Also when you use
add_action
if you want to be able to use more than one input parameter in your function you need to specify the number of parameters. So in your case: