Kommentare kommentieren aber wie?

erstellt am: 11.07.2010 | von: Kay | Kategorie(n): Wordpress | Schlagwörter:, , , , , , ,

Kaum kam das erste Kommentar in den Blog geschneit fiel mir etwas auf was ich bis dato garnicht bemerkt hatte. Ich kann auf Kommentare garnicht antworten! Warum das den nicht? Bei anderen Blogs geht das doch auch, warum bei mir nicht? Die WordPress-Einstellungen waren richtig, es sollte möglich sein war es aber nicht.

 

Eine kurze Rücksprache mit Z (der auch zufällig Autor des 1. Kommentars ist) ergab, er hatte es auf www.royet-crew.de nicht mit einem Plugin gelöst, “mach ich immer ganz normal über die seite”, war seine Antwort.

 

Über die Seite, ganz normal … Attritubute die mir sagten, Ja so kriegen wir das auch hin.

 

Er gab mir auch noch etwas Hilfestellung die allerdings nur bedingt half da ich bei meiner Kommentarliste nicht auf die Standardfunktion wp_list_comments zugriff. Also schaute ich mir mal das neue WordPress Theme twentyten an.
Lange Rede, noch längerer Sinn. Hier nun einer “kleiner” Leitfaden, wie man sich diese Funktion ins WordPress-Theme holt (falls es noch nicht drin is).

 

Die folgenden Dateien des WordPress-Themes müssen wir verändern

 

single.php – Die Seite die einzelne Artikel darstellt
page.php – Falls man auch Kommentare auf statischen Seiten erlaubt
comments.php – Die Seite die, die Kommentardarstellung regelt
functions.php – Platz für verschiedene Spezialfunktion des jeweiligen Templates

 

Falls schon eine Kommentarfuntkion integriert ist suchen wir in der single.php (ggf. auch in der page.php) jetzt den Aufruf dieser, dies sollte im Normalfall mit comments_template geschehen. Falls noch keine Kommentarfunktion integriert ist, fügen wir diese (am sinnvollsten) am Ende des Post hinzu.

<?php comments_template('', true); ?>

Das ruft das Kommentar Template auf auf. Das 1. Argument ” gibt die zu ladende Datei an, in unserem Fall nutzen wir die Standarddatei comments.php also lassen wir das Argument leer. Das 2. Argument gibt an das wir die Kommentartypen differenzieren lassen, alo Kommentare werden von Pingbacks und Trackbacks unterschieden.

 

In die comments.php fügt ihr dann die folgende Zeile ein.

<?php
   wp_list_comments( array( 'callback' => 'trival_comment' ) );
?>

Damit überschreiben wir die ursprüngliche wp_list_comments Funktion. In meinen Fall mit der Funktion trival_comment welche in der functions.php liegt

 

Nun folgt etwas mehr Code den ich behelfsweise auch nur aus der twentyten entnommen und für mich etwas angepasst habe.

<?php
function trival_comment( $comment, $args, $depth ) {
   $GLOBALS['comment'] = $comment;
   //Überprüft ob es ein normales Kommentar oder ein Pingback/Trackback ist
   switch ( $comment->comment_type ) :
   case '' :
?>
<li
   <?php comment_class(); ?>
      id="li-comment-<?php comment_ID(); ?>">
        <div id="comment-<?php comment_ID(); ?>">
	   <div class="comment-author vcard">
	      <?php echo get_avatar( $comment, 40 ); ?>
	      <?php printf(( '%s <span class="says">sagt:</span>'), sprintf( '<cite class="fn">%s</cite>', get_comment_author_link() ) ); ?>
	   </div><!-- .comment-author .vcard -->
	   <?php if ( $comment->comment_approved == '0' ) : ?>
	      <em><?php echo 'Deine Kommentar wartet auf Freigabe.'; ?></em>
	      <br />
	   <?php endif; ?>

           <div class="comment-meta commentmetadata">
              <a href="<?php echo esc_url(get_comment_link($comment->comment_ID )); ?>">
                 <?php
		    /* translators: 1: date, 2: time */
		    printf(( '%1$s um %2$s'), get_comment_date(),  get_comment_time() );
                 ?>
              </a><?php edit_comment_link(('(Bearbeiten)'), ' ' );?>
           </div><!-- .comment-meta .commentmetadata -->

           <div class="comment-body"><?php comment_text(); ?></div>

           <div class="reply">
	       <?php comment_reply_link( array_merge($args, array( 'depth' => $depth, 'max_depth' => $args['max_depth'])) ); ?>
	   </div><!-- .reply -->
	</div><!-- #comment-##  -->

	<?php
		break;
		case 'pingback'  :
		case 'trackback' :
	?>
	<li class="post pingback">
		<p><?php echo'Pingback: '; ?>
                     <?php comment_author_link(); ?>
                     <?php edit_comment_link(('(Bearbeiten)'), ' ' ); ?>
                </p>
	<?php
		break;
	        endswitch;
}
?>

Nun sollte es ohne Probleme möglich sein auf ein Kommentar zu antworten und diese Antwort sollte verschachtelt unter dem Orginalkommentar erscheinen
Bis hierhin kam ich mit Copy&Paste und einfacher Code-Analyse. Allerdings fehlte mir eine, wie ich finde wichtige Funtkion. Wenn man auf den Antworten-Link klickt wird man auf das Kommentarfeld gelinkt. Funktoniert zwar, doch bin ich mir dann als User nicht wirklich sicher ob mein Kommentar jetzt nicht doch einfach als letztes auf der Seite landet. Schöner ist es wenn das Kommentarfeld dann unter das Kommentar rutscht.
Hierfür musste ich etwas in der WordPress-Dokumentation suchen
Diese Funktion bringt WordPress von Haus aus in einem Javascript mit. comment-reply.js ist in diesem Fall das Zauberwort diese muss einfach nur in eure Template-Datei integriert werden
Platziert wird dieser Code im <head>-Bereich eurer Seiten, in den meisten Templates wird das über die header.php geregelt
Also öffnen wir diese und suchen uns die Zeile:

<?php wp_head(); ?>

Und ergänzen über dieser Zeile den folgenden Code:

<?php if ( is_singular() && comments_open() && (get_option('thread_comments') == 1)) {wp_enqueue_script( 'comment-reply' ); }?>

Damit wird das Skript nur geladen wenn man sich auf der Single.php oder Page.php befindet, Kommentare erlaubt sind und verschachtelte Kommentare aktiviert sind)
Vielleicht hilft dieser “kleine” Leitfaden einigen die genau das gleiche Problem hatten. Falls Fehler oder Fragen sind einfach ein Kommentar hinterlassen =).

Hinterlasse eine Antwort

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

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>