Ein Gästebuch in und mit WordPress und comment_type umsetzen

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 10 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet ...

Vor fast zwei Jahren hast Oliver Gast einen Artikel geschrieben, wie man ein Gästebuch mit WordPress-Bordmitteln umsetzen kann. Und seitdem denke ich darüber nach, wie man diese Idee noch erweitern kann. Da die Gästebucheinträge nach wie vor Kommentare sind, kann ich nicht mit einem Blick sehen, wie viele davon nun Gästebucheinträge sind. Daher habe ich mich jetzt mal hingesetzt und ein bisschen was dazu mit comment_type herumprogrammiert.

Als erstes setzen wir den Artikel von Oliver um, auch die Ergänzung aus den Kommentaren zum Umkehren der Kommentar-Reihenfolge. Das kann auch in einem Child-Theme passieren. Hier können wir auch einfacher die folgenden Code-Schnipsel über die functions.php ergänzen. Alternativ kann man den Code auch sicher in ein Plugin gießen oder auf die Toolbox von Sergej Müller ein Plugin wie Code Snippets zurückgreifen.

Als erstes zeichnen wir alle Kommentare auf der Gästebuchseite mit einem neuen comment_type aus. Standardmäßig ist bei WordPress so, dass normale Kommentare gar keinen comment_type haben. Pingback und Trackback haben als comment_type jeweils ihren Namen. Die comment_class wird bei normalen Kommentaren auf comment gesetzt, daher setze ich in diesem Fall zwei Klassen: guestbook und comment. So wird das CSS für die Kommentare trotzdem genutzt, ich kann aber die Gästebucheinträge über die andere Klasse die Einträge individuell stylen. Wir hängen uns dazu einfach in den Kommentarprozess und ändern den comment_type, wenn wir auf der Gästebuchseite sind (in diesem Fall die Seite mit der ID 1322).

// comment type setzen, wenn auf Gästebuchseite
function guestbook_comment_types($commentdata) {
  if ( $commentdata['comment_post_ID'] == 1322 ) { 
  	$commentdata['comment_type'] = 'guestbook comment';
  	}
  return $commentdata;
}
add_filter('preprocess_comment','guestbook_comment_types');

Um diesen Umstand jetzt auch nutzen zu können, ergänzen wir den Filter auf der Kommentarseite um unseren neuen comment_type (inkl. Übersetzungsmöglichkeit) und können nun die Auswahl auf die Gästebucheinträge beschränken.

comment-filter

So kann der neue comment_type gefiltert werden.

//guestbook comment type in Dropdown ergänzen
function guestbook_admin_comment_types_dropdown( $types ) {
	$types['guestbook comment'] = __( 'Gästebucheinträge', 'tl-guestbook' );
	return $types;
}
add_filter( 'admin_comment_types_dropdown', 'guestbook_admin_comment_types_dropdown' );

Um jetzt die Anzahl der Gästebucheinträge auch auf einen Blick zu sehen (sonst bräuchten wir nämlich drei Klicks – Kommentare, Auswahl der Gästebucheinträge, Auswahl einschränken) bauen wir uns noch eine Anzeige der Anzahl der Einträge für das Dashboard. Je nachdem ob wir schon 3.8 installiert haben oder noch nicht gibt es dazu zwei verschiedene Varianten. Den Code für das neue „At a Glance“-Dashboard-Widget habe ich mir von Toscho geliehen.

// nur für WP < 3.8
function add_guestbook_counts() {
	global $wpdb;
	$num_guestbook_entries = $wpdb->get_var( "SELECT COUNT(*) AS total FROM $wpdb->comments WHERE comment_approved = 1 AND comment_type = 'guestbook comment'" );
        
        $num = number_format_i18n( $num_guestbook_entries );
        $text = _n( 'Gästebucheintrag', 'Gästebucheinträge', intval( $num_guestbook_entries ), 'tl-guestbook' );

        if ( current_user_can( "moderate_comments" ) )
            {
                $url  = admin_url( "edit-comments.php?comment_type=guestbook+comment" );
                $num = "<a href='$url'>$num</a>";
                $text = "<a href='$url'>$text</a>";
            }

        echo '<tr>';
        echo '<td class="b b-comments">' . $num . '</a></td>';
        echo '<td class="t comments">' . $text . '</a></td>';
        echo '</tr>';
}


/**
 * Add locations to the new "At a glance" dashboard widget (WP 3.8+).
 *
 * @param  array $items
 * @return array
 */
function add_to_glance( Array $items )
{
    global $wpdb;
    $num  = $wpdb->get_var( "SELECT COUNT(*) AS total FROM $wpdb->comments WHERE comment_approved = 1 AND comment_type = 'guestbook comment'" );
    // Singular or Plural.
    $text = _n(
        '%s Gästebucheintrag',
        '%s Gästebucheinträge',
        $num,
        'tl-guestbook'
    );
    // thousands separator etc.
    $text = sprintf( $text, number_format_i18n( $num ) );

    if ( current_user_can( "edit_comment" ) )
    {
        $url  = admin_url( "edit-comments.php?comment_type=guestbook+comment" );
        $text = "<a href='$url'>$text</a>";
    }

    $items[] = $text;

    return $items;
}

global $wp_version;

if ( version_compare( $wp_version, '3.8', '>=' ) ) {
	add_filter( 'dashboard_glance_items', 'add_to_glance' );
	}
else {
	add_action( 'right_now_discussion_table_end', 'add_guestbook_counts' );
}
right-now-widget

Für WordPress kleiner 3.8 wird der comment_type in das Right Now-Widget eingebaut.

at-a-glace-widget-wp38

Für WordPress 3.8+ wird der comment_type in das neue At a glance-Widget eingebaut.

So können wir schnell sehen, wie viele Gästebucheinträge vorhanden sind und wenn wir die Rechte dafür haben, kommen wir auch direkt per Link auf die Admin-Kommentarseite, um die Kommentare zu bearbeiten oder zu moderieren.

Ein Nachteil hat diese Lösung leider: Aufgrund der kreativen Nutzung des comment_type werden die Gravatare leider nicht mehr angezeigt, da WordPress davon ausgeht, dass es sich bei gesetztem comment_type um so etwas wie ein Trackback/Pingback handelt und somit ein Gravatar nicht sinnvoll ist.

UPDATE:
Nach dem Hinweis von Bernhard in den Kommentaren, habe ich mir das Gravatar-Problem nochmal angeschaut. Für die Darstellung im Kommentarbereich und im Frontend lässt sich das Array der Gravatar-comment_types per Filter erweitern:

// comment type für Gravatare hinzufügen
function add_gravatar_comment_type( $comment_types_array ) {
	$comment_types_array[]='guestbook comment';
	return $comment_types_array;
}
add_filter('get_avatar_comment_types','add_gravatar_comment_type');

Jetzt werden die Gravatare dargestellt. Leider hilft der Filter nicht für das Aktivitäten-Dashboard-Widget, dort fehlt der Filter und das Problem bleibt bestehen.

8 Antworten auf Ein Gästebuch in und mit WordPress und comment_type umsetzen

  1. Sehr gute Idee! Solltest du ruhig gleich in ein Plugin packen 🙂
    Sehr sinnvoll, wenn man beide Sachen – also Kommentare plus ein Gästebuch – betreiben will. Wäre es nicht möglich, die Gravatare nachträglich wieder „zuzuschalten“ für diesen comment_type?

  2. Bug gemeldet! Vielleicht klappt es dann in 3.9 auch im „At a glance“-Widget:
    https://core.trac.wordpress.org/ticket/26944

  3. Ein ganz großes Dankeschön für diesen Beitrag! 🙂

    Von der zusätzlichen CSS-Klasse bei Gästebucheinträgen, über die Anzeige im Dashboard, bis hin zu den Gravataren: genau was ich gesucht habe!

    Danke, danke, danke!

  4. Hallo Torsten,

    ich habe vor einiger Zeit das Gästebuch als Plugin erstellt, was recht gut läuft. Die von dir beschriebene sinnvolle Ergänzung „comment_type“ habe ich hinzugefügt. Leider wird mir in der Box „Auf einen Blick“ kein Icon vor der Anzahl Gästebucheinträge angezeigt. Bei dir ist ein kleiner Kreis zu sehen. Wie bekomme ich das Icon in die Box rein?
    Vielen Dank für einne guten Tipp!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert