WordPress: add_filter oder add_action? Eigentlich egal!

Eine wichtige Doktrin der WordPress-Entwicklung lautet:

Benutze Aktionen, um die Funktionalität zu erweitern, und Filter, um Daten zu ändern.

Wir haben alle davon gehört und sie wird von uns immer beachtet. Immer? Nun ja, …

… wenn ich an einer bestimmten Stelle eine Funktion hinzufügen möchte und weit und breit kein Action-Hook verfügbar ist, dann nehme ich eben ein Filter-Hook ohne über die Doktrin nachzudenken.

Überraschenderweise funktioniert das auch. Aber warum? Wenn immer so darauf hingewiesen wird, dass man den richtigen Hook benutzen soll, dann muss es doch einen Unterschied zwischen den beiden Arten geben. Schauen wir doch mal hinter die Kulissen (/wp-include/plugin.php):

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { return add_filter($tag, $function_to_add, $priority, $accepted_args); }

Was? add_action macht nichts anders als add_filter aufzurufen und sonst nichts? Es gibt keinen Unterschied in der Funktionalität, es ist einfach nur ein andere Name. Es gibt also keinen Grund, warum man nicht add_filter statt add_action benutzen sollte, wenn es keine andere Lösung gibt.

Ich sage nicht, das man wahllos add_action und add_filter nehmen soll. Die Benutzung des richtigen Hook-Typs vereinfacht das Lesen und Warten des Quelltextes, für Dich und für andere. Trotzdem, wenn es einfach keine andere Lösung gibt, um ein Problem zu lösen, dann sollte man nicht zögern und einen Filter-Hook statt eines Action-Hooks zu benutzen, denn eigentlich gibt es keinen Unterschied zwischen den beiden.