Kommentare ohne Plugin paginieren

Computertastatur

Bisher kam es in diesem Blog noch nicht sehr häufig vor, dass ich durch derart viele Kommentare scrollen musste, um zum Eingabefeld oder dem letzten abgegebenen Kommentar zu gelangen. Nun gibt es da bei dem einen oder anderen Leser wohl gewisse Vorlieben.
Den einen stört es wahrscheinlich nicht, durch eine schier endlose Diskussion zu scrollen. Andere finden es womöglich pratkischer, einen Seitenumbruch vorzufinden, wie ich es schon häufig bei ausführlicheren Artikeln in anderen Blogs gesehen habe.

Ich persönlich bin mir momentan gar nicht so sicher, was ich letztendlich bevorzuge. Aber ich wollte hier einfach mal antesten, ob es für mich Sinn macht, Kommentare nach einer gewissen Anzahl zu umbrechen und per Seitennummerierungen das Weiterblättern zu ermöglichen.

Und schön soll das Ganze auch noch aussehen. :-)

Schnell ans Ziel beziehungsweise zum Kommentarfeld gelangen

Direktverlinkung Kommentarbereich

 

Zwischenzeitlich hatte ich bereits durch Einbau einer Verlinkung erreicht, dass Besucher nach Lesen des Beitrages direkt zum Eingabefeld gelangen.

<a href="#respond">Kommentar hinzufügen</a>

 

Nun wurde unter einigen Beiträgen doch sehr angeregt diskutiert und zu einem der letzten Beiträge trudelten über 70 Kommentare ein. Das freut mich natürlich total und ich habe darüber nachgedacht, wie ich das Lesen eines Gesprächsverlaufes funktionell und optisch angenehm gestalten kann.

Umsetzung einer Seitennummerierung für Kommentare

Fündig geworden bin ich bei Dimox, der sehr schön (auf Englisch) den Einbau dokumentiert.

Einbau der Funktion

Einige kleine Veränderungen habe ich vorgenommen, damit die Paginierung in Deutsch umgesetzt wird. Der Code wird regulär in die functions.php des Themes eingefügt. Ich habe diesen als Modul des Plugins “Toolbox” angelegt, der dann so aussieht:

<?php
/*
Module Name: Kommentare paginieren
Description: Kommentare paginieren [Frontend]
Author: Sergej Müller
Author URI: 
*/


/* Sicherheitsabfrage */
if ( !class_exists('Toolbox') ) {
	header('Status: 403 Forbidden');
	header('HTTP/1.1 403 Forbidden');
	exit();
}

function wp_comments_corenavi() {
   $pages = '';
   $max = get_comment_pages_count();
   $page = get_query_var('cpage');
   if (!$page) $page = 1;
   $a['current'] = $page;
   $a['echo'] = true;
 
   $total = 1; //1 - display the text "Page N of N", 0 - not display
   $a['mid_size'] = 3; //how many links to show on the left and right of the current
   $a['end_size'] = 1; //how many links to show in the beginning and end   
   $a['next_text'] = 'Vor » '; //text of the "Next page" link
   $a['prev_text'] = 'Zurück « '; //text of the "Previous page" link
 
   if ($max > 1) echo '<div class="commentNavigation">';
   if ($total == 1 && $max > 1) $pages = '<span class="pages">Seite ' . $page . ' von ' . $max . '</span>'."rn";
   echo $pages . paginate_comments_links($a);
   if ($max > 1) echo '</div>';
}

Paginierung Kommentarbereich

 

In Zeile 25 habe ich den Wert von 0 auf 1 umgestellt, wodurch nun beispielsweise “Seite 1 von 4” erscheint.

Einbau in das Theme

Nun habe ich eine Stelle in der comments.php gesucht und habe mich entschieden, die Seitennummerierung am Ende jeder Kommentarseite darzustellen.

<div id="com_navigation">
	<div class="com_pagination">
		<?php if(function_exists('wp_comments_corenavi')) wp_comments_corenavi(); ?>
	</div>
		</div>

Gestaltung per CSS

Um den Beitrag abzurunden, dürfen meine verwendeten CSS-Werte natürlich nicht fehlen.

#com_navigation{float:right;text-align:right;width:95%;overflow:hidden;font-size:14px;font-weight:normal;text-shadow:-1px -1px 0 #DFDFDF;background:#fff;border:none;color:#000;font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;margin:10px 0px;padding:10px}
#com_navigation a,#com_navigation span{background-color:#606060;-moz-border-radius:1px;-webkit-border-radius:1px;-ms-border-radius:1px;border-radius:1px;border:1px solid #4F4F4F;color:#DFDFDF;font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:15px;font-weight:bold;text-shadow:1px 1px 1px #000;padding:3px 7px 3px 7px;margin:0 1px 0 1px;}
#com_navigation a:hover{background:-ms-gradient(linear,left top,left bottom,color-stop(0.05,#7C7C7C),color-stop(1,#000));background:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#7C7C7C),color-stop(1,#000));background:-moz-linear-gradient(center top,#7C7C7C 5%,#000 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7C7C7C',endColorstr='#000');background-color:#7C7C7C;text-decoration:none}
#com_navigation li{float:right;margin-right:15px;height:15px;text-align:center}
#com_navigation li.pages{width:301px;margin:0 20px}
#com_navigation li.pages a{margin:0 5px;padding:5px;display:inline-block;background:#ccc}
#com_navigation li.pages a active{padding:4px;border:1px solid #ccc;background:#fff}
.com_pagination .navigate-active:hover{background:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#e9e9e9),color-stop(1,#f9f9f9));background:-moz-linear-gradient(center top,#e9e9e9 5%,#f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e9e9e9',endColorstr='#f9f9f9');background-color:#e9e9e9;}
#com_navigation a,#com_navigation span:active{background:-moz-linear-gradient(center top,#3F3F3F 5%,#030303 100%) repeat scroll 0 0 #C2C2C2;border:1px solid #adadad;color:#EFEFE0;text-shadow:-1px -1px 1px #000;-webkit-text-shadow:-1px -1px 1px #000;-moz-text-shadow:-1px -1px 1px #000;-ms-text-shadow:-1px -1px 1px #000;font-weight:bold}

Aktivieren der Paginierung

Umbrechen im Backend aktivierenUm die Anzeige letztendlich zu aktivieren, habe ich im Backend unter Einstellungen den Menüpunkt Diskussion ausgewählt, ein Häkchen bei “Breche die Kommentare um” gesetzt und die Anzahl festgelegt, nach der umbrochen werden soll.

Bei WordPress.org wird ebenfalls dokumentiert, wie eine Seitennummerierung unter Kommentaren erreicht werden kann. Ich habe es kurz angetestet und es funktionierte bei mir ebenfalls einwandfrei.

Auf Zweitblog gab es ein kleines Problem

Auf meiner bunten Blogwelt trat das Problem auf, dass die Nummerierung der Kommentare anfangs nicht fortlaufend auf den Folgeseiten ausgegeben wurde, sondern immer wieder mit Nr. 1 starteten. Schuld daran war ein fehlender Code in der functions.php des Themes “Orangy”. Da aber das Theme dieses Blogs und das meines Zweitblogs von dem selben Webdesigner stammen und deren Aufbau sehr ähnlich ist, konnte ich den Fehler recht schnell ausmachen.

Folgender Code behob dann das Problem

//comments per page
$c_per_page = (int) get_query_var('comments_per_page');
//comments page
$c_page = get_query_var('cpage');
      if ( !$c_page )
          $c_page = 1; 
		  
   static $comment_number = 0;
    if($comment_number == 0) $comment_number += ($c_page-1)*$c_per_page;  	

		$this->currentnumber[$depth + 1] = ''; // and start over for the next lower
		$this->parenttrap[$depth] = $comment_ID;

Vielleicht gefällt Euch die Paginierung und falls nicht, dürft ihr das hier natürlich auch gerne kundtun.

Hinweis
Dieser Beitrag bezieht sich auf Codierungen oder/und Funktionen, die ich noch in meinem alten Template umgesetzt habe. Es ist möglich, dass sie in dem aktuellen Blog-Theme nicht übernommen wurden und somit die Darstellung bzw. Funktion nicht mehr existiert.

Die Autorin:

Sylvi

Meine Beiträge beinhalten eigene Erfahrungen über Soft- und Hardware, Social Media und die ich als WordPress-Bloggerin und Joomlanerin gesammelt habe. Zudem widme ich mich dem schönen Hobby "Fotografie".

2 Kommentare

  • Hallo Sylvi,

    jetzt kommt man aber nicht mehr auf den Kommentar, wenn man bei “Letzte Kommentare” auf den entprechenden Link klickt.

    Liebe Grüße
    hansen

    • Hej hansen,

      ah okay, danke für die Info. Bei Klick darauf wird immer nur der letzte Kommentar der jeweiligen Seite angezeigt. Aber das war vor der Paginierung auch nicht viel besser, da befand sich dieser Link eh immer unter dem letzten Kommentar.

      Aber ich werde mal recherchieren, ob und wie ich es umsetzen kann, dass man durch Klick auf den Link auf den tatsächlich letzten Kommentar des Gesprächsverlaufs geleitet wird.

      Lieben Gruß
      Sylvi

      P.S.: Ich habe diesen Linkeintrag vorerst entfernt, da er in dieser Umsetzung keinen Sinn macht.