删除从插件添加的Wordpress操作,而不是添加新操作来代替

时间:2015-06-11 15:23:46

标签: wordpress wordpress-plugin action hook

我正在创建一个wordpress主题,我需要删除从插件类中添加的wordpress操作。

Here是插件的类,此类中添加的操作是 add_action( 'woocommerce_after_shop_loop_item', array( $this, 'add_compare_link' ), 20 );这是我需要在主题中删除的操作。

删除该操作后,我需要在同一位置添加新操作。 新行动是:

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

尝试this解决方案并完全删除了该操作,但之后无法添加新操作。

我在做的是:

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

任何帮助都将受到高度赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

我不会删除那样的动作。删除从类中添加的操作的传统方法是:

remove_action('woocommerce_after_shop_loop_item', array( $class_variable, 'add_compare_link' ), 20  );

其中类变量是类的实例化。你如何引用它取决于如何在插件中实例化类。

您可以在http://jespervanengelen.com/different-ways-of-instantiating-wordpress-plugins/了解有关实例化类的不同方法以及相应的remove_action

如果您希望在函数中使用多个输入参数,则使用add_action时,需要指定参数个数。所以在你的情况下:

add_action( 'woocommerce_after_shop_loop_item', 'product_add_compare_link', 50, 2 );