✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Beitragsinhalte richtig filtern (und apply_filters verstehen)

44

Hin und wieder, wenn ich mit bereits vorhandenem Quellcode arbeite oder eine Codeprüfung durchführe, sehe ich, dass andere den Post-Inhalt eines Post-Objekts wie folgt ändern :

<?php

$post->post_content = $my_content;

An diesem Punkt werden einige vorbeischauen und sofort sagen, dass Sie es falsch machen. Ich hasse diesen Satz (und er ist sogar in der gesamten WordPress-Codebasis verstreut, aber ich schweife ab).

Es gibt Möglichkeiten, andere vorhandene WordPress-API-Funktionen zu verwenden, um die Daten zu bereinigen, bevor sie auf den Wert des post_content- Attributs gesetzt werden. Die Verwendung dieser Funktionen ist nicht der beste Weg, dies zu tun.

Stattdessen sollten wir alle apply_filters verwenden. Das Problem? Manche wissen es nicht, manche wissen nicht, wie es funktioniert, und manche wissen nicht, wie man es benutzt. Das heißt, es ist nicht klar, wie man Post-Inhalte richtig filtert.

Von WordPress gefilterte Rohinhalte, die dann in die Datenbank geschrieben werden.

Aber für diejenigen, die in eine der oben genannten Kategorien fallen, kann dies vielleicht helfen.

Beitragsinhalte richtig filtern

An dieser Stelle gehe ich davon aus, dass Sie über WP_Post, seine Eigenschaften und deren Modifizierung durch verschiedene API-Funktionen Bescheid wissen.

Das Hauptproblem, von dem ich spreche, ist sicherzustellen, dass der Inhalt, der in die Datenbank geschrieben wird, genauso formatiert ist, wie WordPress es tun würde, wenn Sie einen Beitrag schreiben oder aktualisieren würden.

Und die Art und Weise, wie das passiert, ist wie folgt (und wir werden bald auf die Details dazu eingehen):

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = apply_filters( 'the_content', $new_content );

Aber die Fragen, was diese Funktion tut, wie sie funktioniert und wann sie verwendet wird, bleiben bestehen.

Was ist apply_filters?

Sicher, Sie können alles darüber in den Entwicklerressourcen lesen, und es gibt diese Definition :

Rufen Sie die einem Filter-Hook hinzugefügten Funktionen auf.

Aber das hilft nicht immer. Ich meine, wir können die Dokumentation lesen und trotzdem verwirrt weggehen, oder?

Denken Sie so darüber nach:

  1. Ein Filter ist eine Funktion, die Eingaben zur Verarbeitung akzeptiert.
  2. Die Eingabe wird basierend auf der Definition der Funktion verarbeitet.
  3. Die Funktion gibt dann den verarbeiteten Wert zurück.

Was Sie mit dem zurückgegebenen Wert tun, liegt bei Ihnen, aber wenn Sie einen Filter anwenden oder apply_filters auf eine Information aufrufen, sagen Sie WordPress: „Ich habe diese Information, bitte wenden Sie den durch diesen Schlüssel identifizierten Filter an und übergeben Sie die Ergebnis an mich zurück."

Nicht schlecht, oder?

Wie funktioniert es?

Aber es gibt einen Teil des oben Gesagten, der zu einer Frage führt. Insbesondere erwähne ich, dass „…bitte den durch diesen Schlüssel identifizierten Filter anwenden…“ und die Idee eines Schlüssels verwirrend sein kann, insbesondere weil ein Filter oder eine Aktion oder allgemeiner gesagt ein Hook durch ein sogenanntes Tag oder a identifiziert werden kann Schlüssel.

Sie sind Synonyme. Wenn Sie also tag oder key im Kontext eines Hooks sehen, behandeln Sie sie als solche.

So funktioniert es:

  1. Die Funktion apply_filters akzeptiert zwei Argumente. Der erste ist das Tag oder der Schlüssel (je nachdem, wie Sie ihn nennen möchten), der mit dem Filter (sprich: Funktion) verknüpft ist, den Sie verwenden möchten, um die Arbeit zu verarbeiten, der zweite ist der Wert, den Sie innerhalb dieser Funktion verarbeiten möchten.
  2. Der Filter wird ausgelöst und gibt ein Ergebnis zurück (oder, denken Sie daran, die Funktion, die wir definiert haben).
  3. Wir nehmen dann den zurückgegebenen Wert und wenden ihn auf die gewünschte Eigenschaft an.

So sehen Sie zum Beispiel wahrscheinlich so etwas in der Codebasis eines anderen (oder vielleicht sogar in Ihrer eigenen):

<?php

$post->post_content = apply_filters( 'the_content', $my_content );

Und jetzt, da Sie ein bisschen Kontext dafür haben, wie es funktioniert, haben Sie die Idee, richtig?

Wie verwenden wir es?

Damit schließt sich der Kreis zur ursprünglichen Frage, wie wir apply_filters auf post_content verwenden können, wann immer wir einen Beitrag einfügen oder aktualisieren müssen.

Nehmen wir also an, Sie haben den Inhalt, den Sie auf den Wert des Inhalts eines Beitrags anwenden (oder anhängen) möchten. Du könntest so etwas machen :

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = $new_content;

Aber das ist schlechte Form. Stattdessen machst du Folgendes :

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = apply_filters( 'the_content', $new_content );

Und so macht es WordPress.

Fazit

Angesichts all der oben genannten Informationen und des Codes sollten Sie also nicht nur gut gerüstet sein, um sicherzustellen, dass Sie Daten, die in die Datenbank eingefügt werden, richtig filtern, sondern auch über das Wissen verfügen, das zum Definieren Ihrer Filter und zum Anwenden dieser erforderlich ist alle Daten, die Sie für richtig halten.

Aber Beispiele dafür sind Inhalte für einen anderen Beitrag.

Wenn Sie in der Zwischenzeit mit Post-Inhalten arbeiten, stellen Sie sicher, dass Sie die Daten richtig filtern, bevor Sie sie in die Datenbank einfügen.

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen