Override a Plugin Function

时间:2017-11-24 作者:Colin

我正在使用WooCommerce插件,它有一个过滤器,可以过滤我想要覆盖的电子邮件。过滤器声明如下:

public function __construct() {

        add_filter( \'woocommerce_email_attachments\', array( $this, \'attach_ics_file\' ), 10, 3 );

    }
作为课程的一部分:

class WC_Booking_Email_Manager 
功能是:

public function attach_ics_file( $attachments, $email_id, $booking ) {
        $available = apply_filters( \'woocommerce_bookings_emails_ics\', array( \'booking_confirmed\', \'booking_reminder\' ) );

        if ( in_array( $email_id, $available ) ) {
            $generate = new WC_Bookings_ICS_Exporter;
            $attachments[] = $generate->get_booking_ics( $booking );
        }

        return $attachments;
    }
这只是附加了一个。ics日历文件到电子邮件。我不想发生这种事。

在我的功能中。php,我尝试了:

remove_filter( \'woocommerce_email_attachments\', array( $GLOBALS[\'WC_Booking_Email_Manager\'], \'attach_ics_file\' ), 10,3);
但这不起作用。

我的问题是,如何通过重写函数来阻止附件的发生,但只能在这个插件的上下文中?i、 e.还有其他插件可以制作附件,我不想阻止他们这样做。

Edit

下面的代码是通过使用上面代码中的过滤器并返回空数组来解决的。它被放置在函数中。主题的php。

function woocommerce_bookings_emails_ics_edits( $array ) {

    return array();
}
add_filter( \'woocommerce_bookings_emails_ics\', \'woocommerce_bookings_emails_ics_edits\', 10, 1 );

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

下面的代码是通过使用上面代码中的过滤器并返回空数组来解决的。它被放置在函数中。主题的php。

这不是一种“变通方法”。这是正确的方法。但做同样的事情还有一个较短的方法。

WordPress有一个名为__return_empty_array() 刚刚回来array(). 因此,如果要使用筛选器清空数组,可以使用:

add_filter( \'woocommerce_bookings_emails_ics\', \'__return_empty_array\' );

结束

相关推荐

子主题函数.php文件中的出列是否会阻止加载Google字体?

我使用的是1.0.8版的盾徽主题。在搜索了我所有主题的文件后,我看到谷歌字体引用的唯一地方是在函数中。php。正在退出子函数中的Google字体队列。php文件足以阻止在我的网站上加载Google字体,否则$fonts_url = add_query_arg( $query_args, \'https://fonts.googleapis.com/css\' );在我的父函数中。php文件仍然会触发对Google字体服务器的调用,即使子文件运行正常。php文件出列了吗?下面是子函数。我希望php代码能够完