it-swarm.com.de

Wie kann man das WordPress-Plugin auf Datenbankänderungen überprüfen lassen und dann etwas unternehmen?

Wie überprüfe ich zum Beispiel, ob es einen neuen Kommentar in der Datenbank gibt und lasse mein Plugin dann registrieren, dass es eine Änderung gegeben hat? Ich werde diese Informationen verwenden, um anschließend mit meinem Plugin etwas in der Datenbank zu tun.

Jede Hilfe dankbar. Konnte nichts zu dieser Frage finden.

2
slider2013

Durch Überprüfen der date Spalten:

Um nur nach neuen Kommentaren, neuen Beiträgen usw. zu suchen, können Sie einen Cron-Job erstellen und dann den comment_date, post_date usw. überprüfen, um festzustellen, ob in diesen Tabellen etwas Neues enthalten ist. Speichern Sie einen zuletzt überprüften Zeitstempel aus dem Cron-Job, sodass jede Zeile mit date größer als der zuletzt überprüfte Zeitstempel eine neue Einfügung ist.

Verwenden von WordPress-API-Filter-/Aktions-Hooks:

WordPress löst einige Filter-/Aktions-Hooks aus, bevor/nachdem Datenbankänderungen vorgenommen wurden.

Normalerweise werden Aktions-Hooks ausgelöst nachdem eine Datenbankaktion abgeschlossen ist. Oft haben diese Hooks ein Namenspräfix suffix wie added/update/updated/deleted/save/insert usw. Leider ist die Benennung von WordPress-Hooks nicht konsistent, sonst wäre es viel einfacher gewesen.

Die Kommentar-API löst beispielsweise die folgenden Aktions-Hooks nach Datenbankänderungen aus:

Beispielcode mit einem Aktions-Hook:

add_action( 'wp_insert_comment', 'wpse_comment_inserted' );
function wpse_comment_inserted( $comment_id, $comment_object, 99, 2 ) {
    // comment with id $comment_id is inserted into the database,
    // do something with it here
}

Es gibt viele andere/- Filter-Hooks und Aktions-Hooks , die vor/nach Datenbankänderungen ausgeführt werden. Verwenden Sie sie nach Bedarf.

Die Verwendung dieser Hooks hat den Vorteil, dass Sie sich keine Gedanken über interne Änderungen machen müssen, da sie Teil des WordPress-Kerns sind. Der Nachteil ist jedoch, dass es Plugins/Themes geben kann, die diese Kern-API (s) nicht verwenden, sondern ihre benutzerdefinierten Abfragen ausführen. Sie können also keine DB-Änderungen von diesen abfangen.

Mit query filter hook:

Es ist auch möglich, Einfüge-/Aktualisierungs-/Löschabfragen zu verfolgen, die über die WordPress $wpdb API vorgenommen wurden. Jede Datenbankabfrage, die die WordPress-Datenbank-API verwendet, verwendet $wpdb (eine Instanz der Klasse wpdb). Alle Abfragen (einschließlich Einfügen, Aktualisieren und Löschen) lösen query filter hook aus. Mit diesem Hook können Sie also alle Abfragen filtern, bevor sie ausgeführt werden.

Es funktioniert jedoch nicht, wenn ein Theme/Plugin benutzerdefinierte DB-Abfragen außerhalb der WordPress $wpdb-API erstellt oder wenn eine Kernabfrage ausgeführt wird, bevor das Plugin geladen wird, oder wenn eine externe Anwendung die Änderungen über benutzerdefinierte SQL-Abfragen vornimmt.

Durch die Erweiterung der Klasse wpdb:

Es ist auch möglich, eine db.php -DATEI IM VERZEICHNIS wp-content zu erstellen (oder einen Softlink in wp-content über ein Plugin zu erstellen) und die Klasse wpdb von dort aus zu erweitern. Auf diese Weise können Sie jede Methode der Klasse wpdb erweitern und die Einfüge-/Aktualisierungs-/Löschabfragen von dort aus verfolgen.

Mit dem Datenbank-Trigger:

Um jedoch jede Datenbankänderung durch eine SQL-Abfrage zu verfolgen, besteht die einzige zuverlässige und vollständige Möglichkeit darin, Trigger bei Aktivierung des Plugins zu erstellen und anschließend die Datenbankänderungen durch den Trigger zu verfolgen. Um dies von einem Plugin aus zu tun, muss der für WordPress verwendete Datenbank-Berechtigungsnachweis über die Berechtigung zum Erstellen/Löschen von Triggern verfügen.

Achtung: Zu viele Trigger können DB-Abfragen verlangsamen. Stellen Sie außerdem sicher, dass Sie die Trigger zum Zeitpunkt der Deaktivierung des Plugins bereinigen.

5
Fayaz

Wenn Sie möchten, dass etwas passiert, wenn ein Kommentar vom Kommentator gespeichert (gepostet) wird, dann möchten Sie den Filter preprocess_comment verwenden (siehe Plugin-API/Filterreferenz/Preprocess-Kommentar ).

function preprocess_comment_handler( $commentdata ) {
    //some code
    return $commentdata;
}
add_filter( 'preprocess_comment' , 'preprocess_comment_handler' );

Fügen Sie einfach Code für alles hinzu, was beim Speichern eines Kommentars passieren soll. Fügen Sie diesen Codeblock in Ihren functions.php ein (in einem untergeordneten Design, damit ein Designupdate Ihren Code nicht überschreibt).

2
Rick Hellewell