【问题标题】:Removing a Wordpress action added from a Plugin and than adding a new action in place of that删除从插件中添加的 Wordpress 操作,然后添加一个新操作来代替它
【发布时间】:2015-12-13 13:21:52
【问题描述】:

我正在创建一个 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 );

我们将不胜感激。

谢谢

【问题讨论】:

    标签: wordpress action hook


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多