Überschreiben Sie eine Plugin-function

Ich benutze ein WooCommerce-Plugin und es hat einen Filter für E-Mails, die ich überschreiben möchte. Der Filter ist als solcher deklariert:

public function __construct() { add_filter( 'woocommerce_email_attachments', array( $this, 'attach_ics_file' ), 10, 3 ); } 

Als Teil einer class:

 class WC_Booking_Email_Manager 

Die function ist:

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

Dies fügt einfach eine .ics-Kalenderdatei an E-Mails an. Ich möchte nicht, dass dies geschieht.

In meiner functions.php versuchte ich:

 remove_filter( 'woocommerce_email_attachments', array( $GLOBALS['WC_Booking_Email_Manager'], 'attach_ics_file' ), 10,3); 

Aber das funktioniert nicht.

Meine Frage ist, wie verhindere ich Attachements durch Überschreiben der function, sondern nur im Kontext dieses Plugins? Dh es gibt andere Plugins, die Anhänge machen und ich möchte sie nicht davon abhalten.

Bearbeiten

Der folgende Code funktioniert, indem Sie den Filter im obigen Code verwenden und ein leeres Array zurückgeben. Es befindet sich in der functions.php Ihres Themes.

 function woocommerce_bookings_emails_ics_edits( $array ) { return array(); } add_filter( 'woocommerce_bookings_emails_ics', 'woocommerce_bookings_emails_ics_edits', 10, 1 ); 

Solutions Collecting From Web of "Überschreiben Sie eine Plugin-function"

Der folgende Code funktioniert, indem Sie den Filter im obigen Code verwenden und ein leeres Array zurückgeben. Es befindet sich in der functions.php Ihres Themes.

Es ist kein “Work around”. Das ist der richtige Weg. Aber es gibt einen kürzeren Weg, um das Gleiche zu tun.

WordPress hat eine function namens __return_empty_array() , die nur array() zurückgibt. Wenn Sie also ein Array mit einem Filter leeren wollen, können Sie das einfach verwenden:

 add_filter( 'woocommerce_bookings_emails_ics', '__return_empty_array' );