WordPress – Kommentare Von Autoren Immer Hervorheben

Manchmal passiert es, dass sich Autoren beim Kommentieren ihrer eigenen Beiträge nicht erst einloggen sondern als Gast einen Kommentar schreiben. In diesem Fall wäre es wünschenswert das auch dieser Kommentar hervorgehoben wird. Dafür gibt es nun zwei Methoden. Die erste Methode bearbeitet nach Erstellung des Kommentars diesen in der Datenbank so ab, als hätte der Autor diesen im eingeloggten Zustand geschrieben. Die zweite Methode vergleicht bei der Auslieferung der Kommentare eines Beitrages die E-Mail Adressen und hebt jene Beiträge hervor dessen E-Mail Adresse mit der des Autors übereinstimmt.

Beide Methoden haben ihre Vor- und Nachteile wobei ich auf jeden Fall die erste Methode präferiere und auch weiter unten euch als fertiges WordPress Plugin präsentiere. Ändert der Autor mal seine E-Mail Adresse schlägt nämlich der Vergleich aus der zweiten Methode fehl.

<?php
/*
Plugin Name: Autor Kommentare automatisch hervorheben
Plugin URI: http://blog.rschu.me/wp-plugins
Description: Automatische Hervorhebung von Kommentaren dessen E-Mail Adresse mit der des Autors identisch ist.
Version: 1.0.1
Author: Robin Schulz <hello@rschu.me>
Author URI: http://rschu.me/
*/

add_action('comment_post', function($comment_id)
{
    global $wpdb;

    $result =
        $wpdb->get_row(
            $wpdb->prepare(
                "
                    SELECT
                        t1.comment_author_email,
                        t3.ID as user_id,
                        t3.user_email
                    FROM
                        $wpdb->comments as t1
                    INNER JOIN
                        $wpdb->posts as t2
                    ON
                        t2.id = t1.comment_post_ID
                    INNER JOIN
                        $wpdb->users as t3
                    ON
                        t3.ID = t2.post_author
                    WHERE
                        t1.comment_id = %s
                    LIMIT 1
                ",
                $comment_id
            ),
            'OBJECT'
        );

    if($result !== null)
    {
        if($result->comment_author_email === $result->user_email)
        {
            $wpdb->update(
                $wpdb->comments,
                array(
                    'comment_approved' => 1,
                    'user_id' => $result->user_id
                ),
                array(
                    'comment_ID' => $result->comment_id
                )
            );
        }
    }
});

Das Plugin ist relativ simpel aufgebaut und sicherlich fällt auch direkt auf das ich hier mit einer anonymen Funktion arbeite. Für mich persönlich ist die Methode mit einer anonymen Funktion praktischer, übersichtlicher und es wird nicht unnötig eine Funktion erstellt welche eh nur an einer Stelle Verwendung findet.

Über die WordPress Funktion addaction() wird das Plugin aufgerufen. An erster Stelle teilen wird der Funktion mittels ‘commentpost’ mit, dass der Inhalt aus der anonymen Funktion an zweiter Stelle bei der Erstellung eines Kommentars aufgerufen werden soll. Die anonyme Funktion bekommt mit $comment_id die inkrementelle Kommentar ID aus der Datenbank von dem zuletzt erstellten Kommentar übergeben welche die Grundlage für unser Plugin bildet.

Die darauf folgende Datenbankabfrage holt sich neben der user_id und der user_email vom Autor des kommentierten Beitrags auch die E-Mail Adresse des Kommentator da alle drei Daten im nächsten Schritt benötigt werden.

Der letzte Schritt besteht aus dem Abgleich der E-Mail Adressen vom Kommentator und Autor. Stimmen beide E-Mail Adressen überein, wird zum einen der Kommentar sofort freigeschaltet (comment_approved) und das Datenbankfeld user_id von dem Wert 0 mit der zuvor herausgezogenen user_id überschrieben.

Das Snippet/Plugin darf gerne verwendet und abgeändert werden.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn