Wenn es um Performance-Verbesserungen geht, wird vermutlich eines der letzten Dinge sein, Block-Vorlagen zu beachten. Aber hier sind wir nun. Und als ich entdeckte, dass ich mehrere doppelte SQL-Abfragen wegen Block-Vorlagen von WooCommerce hatte, habe ich geschaut, wie ich sie deaktivieren kann.

Tatsächlich habe ich meine lokale Umgebung via Query Monitor überwacht und 14 doppelte SQL-Abfragen bemerkt, die alle durch das Registrieren verschiedener Block-Vorlagen innerhalb von WooCommerce kamen. Daher wollte ich sie deaktivieren.

Ja, man kann Block-Vorlagen einfach deaktivieren, indem man sie nach ihrer Registrierung wieder de-registriert. Allerdings hilft das in dem Fall nicht, die doppelten SQL-Abfragen von ihrer Registrierung zu entfernen. Deshalb habe ich nach einem Weg gesucht, sie komplett zu deaktivieren, sodass gar keine entsprechenden SQL-Abfragen mehr ausgeführt werden.

Leider gibt es dafür (noch) keine Einstellung. Ich habe einen offenen Issue über das Deaktivieren von Block-Vorlagen von WooCommerce gefunden, aber er ist nach wie vor offen und bisher nicht implementiert. Dann fand ich einen Artikel von OnPoint Plugins über das Deaktivieren von WooCommerce-Blöcken, in dem ich den ersten Teil meiner Lösung fand, um Actions zu entfernen, die WooCommerce hinzufügt. Doch da dieser Beitrag die WooCommerce-Blöcke selbst entfernt, bleiben die Block-Vorlagen unangetastet. Also habe ich den Quellcode selbst durchstöbert, um zu sehen, welches WooCommerce-Paket die Vorlagen registriert.

Dabei gibt es mehrere Bereiche, in denen Block-Vorlagen registriert werden. Zwei davon können über den oben gezeichneten Weg entfernt werden (siehe die Zeilen 10 – 13), während andere durch das Entfernen direkt am wp_loaded-Hook deaktiviert werden können (Zeilen 18 – 37).

Der vollständige Code sieht so aus und kann als MU-Plugin unter /wp-content/mu-plugins/ verwendet werden.

<?php
use Automattic\WooCommerce\Blocks\BlockPatterns;
use Automattic\WooCommerce\Blocks\BlockTypesController;
use Automattic\WooCommerce\Blocks\BlockTypes\Cart;
use Automattic\WooCommerce\Blocks\Package;

/**
 * Remove default block patterns.
 */
\add_action( 'woocommerce_blocks_loaded', static function() {
	\remove_action( 'init', [ Package::container()->get( BlockPatterns::class ), 'register_block_patterns' ] );
	\remove_action( 'init', [ Package::container()->get( BlockPatterns::class ), 'register_ptk_patterns' ] );
} );

/**
 * Remove additional block patterns.
 */
\add_action( 'wp_loaded', static function() {
	global $wp_filter;
	
	foreach ( $wp_filter['wp_loaded']->callbacks[10] as $filter ) {
		if ( ! is_callable( $filter['function'] ) ) {
			continue;
		}
		
		if ( ! is_array( $filter['function'] ) ) {
			continue;
		}
		
		if (
			( $filter['function'][0] instanceof Cart && $filter['function'][1] === 'register_patterns' )
			|| ( $filter['function'][0] instanceof BlockTypesController && $filter['function'][1] === 'register_block_patterns' )
		) {
			\remove_action( 'wp_loaded', $filter['function'] );
		}
	}
}, \PHP_INT_MIN );
Code-Sprache: PHP (php)

1 Kommentar

  1. Füg doch mal in dem Issue hinzu das es ein Performance-Problem ist und doppelte SQL-Queries auslöst. Das bringt vllt Schung in das Ticket

Likes

Neuveröffentlichungen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Um auf deiner eigenen Website zu antworten, gib die URL deiner Antwort ein, die einen Link zur Permalink-URL dieses Beitrags enthalten sollte. Deine Antwort wird dann (möglicherweise nach der Moderation) auf dieser Seite erscheinen. Möchtest du deine Antwort aktualisieren oder entfernen? Aktualisiere oder lösche deinen Beitrag und gib die URL deines Beitrags noch einmal ein. (Mehr über die Funktion von Webmentions erfahren)