Konzepte, Ideen, Strategien
Konzepte, Ideen, StrategienÄhnlichkeiten zwischen WordPress-Hooks und GraphQL-Direktiven

Ähnlichkeiten zwischen WordPress-Hooks und GraphQL-Direktiven

Eine WordPress-Anwendung ist durch Plugins und den Einsatz von Hooks (Actions und Filter) sehr flexibel erweiterbar, um das Verhalten von Codeteilen zu verändern (sei es von WordPress Core, dem Theme oder Plugins). Hooks sind einfache Codebausteine, die einen Wert überschreiben oder eine Aktion ausführen können, sobald sie ausgelöst werden.

In diesem Beispiel erlaubt der Filter block_categories, die im WordPress-Editor aktivierten Block-Kategorien zu ändern:

\add_filter(
  'block_categories',
  function(array $categories): array
  {
    return [
      ...$categories,
      [
        'slug' => 'graphql-api-access-control',
        'title' => __('Access Control for GraphQL', 'graphql-api'),
      ],
    ];
  }
);

Hooks sind einfach, vielseitig und mächtig; sie können missbraucht werden, aber gut implementiert machen sie die Anwendung in einem Maße erweiterbar, das der Entwickler nicht im Voraus geplant hat.

GraphQL-Direktiven als Hooks

Direktiven können als das GraphQL-Äquivalent dessen betrachtet werden, was Hooks für WordPress sind.

Ähnlich wie ein WordPress-Hook ist eine Direktive eine Funktion, die den Wert eines Feldes verändert und damit eine andere Funktionalität erweitert. Wie ihr Gegenstück ist sie einfach, vielseitig und mächtig.

Angenommen, wir rufen eine Liste von Post-Titeln mit dieser Query ab:

query {
  posts {
    title
  }
}

Diese Ergebnisse sind auf Englisch. Wie können wir sie ins Deutsche übersetzen? Mit einer Direktive @strTranslate, die auf das Feld title angewendet wird, dessen Wert als Eingabe nimmt, die Google Translate API aufruft, um ihn zu übersetzen, und dieses Ergebnis zurückgibt, wie in dieser Query:

query {
  posts {
    title @strTranslate(from: "en", to: "de")
  }
}

Der Anwendungsfall für Erweiterbarkeit ist klar: Für einen gegebenen Wert des Feldes title können wir ihn auf beliebige Weise über eine Direktive verändern. In diesem Fall ist die Veränderung die Übersetzung ins Deutsche über @strTranslate, aber es könnte auch die Umwandlung in Groß-/Kleinschreibung über @strUpperCase und @strLowerCase sein, oder irgendetwas anderes.