Zähler für Kommentare, Track- und Pingbacks ab WordPress 2.7

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

Kommentare

  
  1. Simon sagt:

    Super, genau danach war ich gestern auf der Suche. Danke für diese Lösung!

  2. BongoUser sagt:

    Hi,
    ich würde gerne die Pingbacks/Trackbacks etwas anders darstellen, wenn ich

    aufrufe zeigt er mit 2x mal den "Author" an und und noch content.
    ich würde gerne nur den "Auhtor" mit Link zum Trackback/Pingback anzeigen.
    Ich werde einfach aus dem ganzen nicht so recht schlau.

    • Das obige Beispiel soll auch nur den EInbau des Zähler verdeutlichen, die Links etc. werden mit den gängigen Template Tags von WP erstellt.

  3. BongoUser sagt:

    Hi,
    um das Beispiel oben aber richtig nutzen zu können macht es Sinn das ergänzend zu posten. Dieses Beispiel hab ich ja auch schon x-mal im Web gefunden, aber nie den Punkt zur Darstellung dazu.
    Wenn ich das richtig gesehen habe müsste man wp_list_comments mit einer Callback Funktion aufrufen um das Layout anpassen zu können. Ich habs aber nicht hinbekommen. Auch wenn ich schon einigene kleine Plugins geschrieben hab bekomm ich das nicht ganz auf die Reihe. Bin noch ziemlich frisch im WP Bereich.

    • Schau dir mal den Code meiner Sandbox an; ab 2.7 muss zusätzlich ein Eintrag in der header.php sein, um die threaded comments zu ermöglichen. Ich vermute, dort siehst du es klarer, da die comments.php mit allen Inhalten da ist. Ansonsten muss ich mal Zeit finden und ein kleines Tutorial erstellen.

  4. BongoUser sagt:

    Ah ja, vielen Dank.
    Das ist doch mal ein Beispiel das man umsetzen kann.
    Funktioniert jetzt wunderbar, Danke Frank!

  5. Kretzschmar sagt:

    Ich habe in meinem theme dkret3 gerade die Unterstützung eines neuen Plugins eingebaut. Gregs Threaded Comments Numbering bietet eine wunderbar einfache und komfartable Möglichkeit, Kommentare zu nummerieren.

    Außerdem werden Unterkommentare entsprechend gezählt (1.1 etc.). Wirklich ein tolles Plugin.

  6. Mobe sagt:

    Danke für die ausführliche Anleitung! Mal sehen ob ich damit zurecht komme.

    Gruß
    Mobe

  7. Markus sagt:

    Hi Frank, ich hab Dein Beispiel für den Kommentarzähler mal bei mir ausprobiert und bis auf eine Kleinigkeit funktioniert das auch. Ich würde gerne die Kommentare getrennt gezählt haben. Als Beispiel: Es liegen zwei Pingbacks, ein Trackback und drei Kommenatre vor. Die Tracks und Pings werden mit dem obigen Codeschnipsel richtig gezählt, nur bei den Kommentaren steht im Zähler "6" anstatt "3" ... wie muss ich das ändern um die "normalen" Comments getrennt zu zählen?

    • $type == 'comment' ist der Schlüssel. Du kannst also die obige Funkion nutzen und mit Übergabe des Paramter $type den Typ mitgeben, in dem Fall comment.

  8. BongoUser sagt:

    Hi,

    bei mir hab ich das "getrennte Zählen" wie folgt gelöst:

    /**
    * Funktion zum zählen der Comments und Pingbacks
    */
    add_filter('get_comments_number', 'comment_count', 0);
    
    function comment_count( $count ) {
    	global $id;
    	$comments_by_type = &separate_comments( get_comments('post_id=' . $id) );
    	return count($comments_by_type['comment']);
    }
    
    function pings_count( $count ) {
    	global $id;
    	$comments_by_type = &separate_comments( get_comments('post_id=' . $id) );
    	return count($comments_by_type['pings']);
    }
    
  9. Markus sagt:

    alles klar, habs gerade hinbekommen, was mich in diesem Zusammenhang interessieren würde ist die Ausgabe. Wenn man comments_number nutzt lässt sich die Ausgabe variabel gestalten, also Ein Kommentar, 5 Kommentar(e) bzw. Kein Kommentar als Beispiel. Lässt sich sowas auch für Deine Funktion "fb_comment_type_count" realisieren?

    Auf jeden Fall erstmal Danke für die schnelle Antwort und Respekt für Deine mehr als hilfreiche Seite die wirklich klasse Beiträge bereit hält! Grüße, Markus

    • @Markus: danke für den Hinweis, dass hatte ich damals nicht vorgesehen und nun habe ich es ergänzt. Man hat nun mehr Parameter und ich habe es nicht als reine Ausgabe realisiert, sondern via Filter, wie es WordPress auch macht.

      @alle: Bitte schaut euch das Update des COde an, es bietet mehr Möglichkeiten.

  10. BongoUser sagt:

    @Markus:
    Bei mir sieht das so aus:
    comments_popup_link(__('Kommentare (0)'), __('Kommentar (1)'), __('Kommentare (%)'));

  11. Markus sagt:

    was für ein Service! Klasse Frank, ich bin ja begeistert ... Ich erstelle zwar selbst Webseiten und WordPress-Templates aber was Funktionsprogrammierung angeht bin ich froh, dass es Leute wie Dich gibt die mit Ihrem Know-How weiterhelfen. Ich baue gerade an einem Theme, dass nach Möglichkeit alle wesentlichen Funktionen der neuen WordPress-Version nutzt aber wenn ich mir Dein Basis-Template anschaue geht da noch ne ganze Menge mehr. Die Kommentargeschichte ist ja im neuen WP ein wenig zweischneidig. Auf der einen Seite wird manches vereinfacht, auf der anderen Seite wirds doch wieder komplexer sofern man die Comments wirklich individuell stylen möchte ... auf jeden Fall hat mich Dein Beispiel hier schon ne ganze Ecke weitergebracht ...

    @ BongoUser: Danke für den Tipp, ich hoffe das ich irgendwann mal alle Template-Tags im FF parat habe, den comments_popup hatte ich bisher noch garnicht auf dem Schirm ... beste Grüße, Markus

  12. Danke für den Tipp jetztmkann ich endlich auch auf WP 2.7 updaten.

  13. Robert sagt:

    Hallo Frank,
    ich habe die getrennte Zählung gemäß deinem Beispiel und dem Code aus der Sandbox nun auch bei mir realisiert. Ist es noch möglich den Code für die Hervorhebung der Kommentare des Blogbetreibers? Bis jetzt benutzte ich immer folgenden Code:

    <li id="comment-"
    comment_author_email == get_the_author_email()) && ($comment->user_id != 0) ) {
    echo " class=\"autor_kommentar\"";
    } else {
    echo " class=\"" . $oddcomment . "\"";
    }
    ?>>

    Leider funktioniert das nicht wie gewünscht, hast du eine Lösung?

    • Ich übergebe beim Aufruf von wp_list_comment() eine Funktion mit, welche sich um die Ausgabe der Kommentare kümmert. Ist auch so in der Sandbox:

      		<?php if ( empty($comments_by_type['comment']) ) { ?>
      			

      <?php fb_comment_type_count( 'comment' ); ?>

        <?php wp_list_comments( 'type=comment&callback=fb_theme_comment' ); ?>
      <?php } ?>

      Diese Funktion hat eine neue Funktion im li-Tag: comment_class():

    • Diese vergibt die entsprechenden Klassen, so dass ich das Abfragen wie du es zeigst, gar nicht machen muss. Ich habe damit die Klasse author bzw. bypostauthor dabei und die formatiere ich dann entsprechend.

  14. Robert sagt:

    Vielen Dank für den Hinweis, die Funktion kannte ich noch gar nicht. Habe sie jetzt aber implementiert. Doch gleich das nächste Problem, eine leere Weiße Seite wenn ich ein Kommentar abschicke, egal ob ein Angemeldeter oder nicht angemeldeter Benutzer das macht, sowohl bei FF als auch beim IE. Offenbar kommt kein Rücksprung von der wp-comments-post.php - ob es an dem Formular liegt? Ich kann keinen Fehler entdecken.

  15. Robert sagt:

    Kurioserweise habe ich Testhalber jetzt die Funktion fb_theme_comment, fb_comment_type_count und fb_update_comment_type_cache aus deiner Sandbox übernommen. Die comments.php habe ich zu Testzwecken ebenfalls durch die aus der Sandbox 1:1 ersetzt. Der Fehler bleibt aber der gleiche.
    Das Kommentar wird zwar eingetragen und erscheint auch beim erneuten Seitenaufruf, aber die leere Seite wird weiterhin angezeigt und springt nicht zurück.

  16. Robert sagt:

    Gute Idee, ein anderes Theme, dasselbe Problem. Plugins deaktiviert und probiert. Aha! Ich sollte noch einen Kaffee trinken, der Comment Mailer hat einfach keine Eingabe erhalten, weil ich das entsprechende Feld noch nicht eingefügt hatte. Wie peinlich!
    Du kannst diese Kommentare gerne löschen 😉

  17. Robert sagt:

    if ( function_exists( 'fb_comment_type_count' ) ) { // alternativ type pings fuer trackback + pingback if ( empty($comments_by_type['$post_id']) ) { ?> <?php }

    EIne Frage ergibt sich jetzt doch noch. Wenn die Abfrage kein Pingback vorfindet, gibt es trotzdem ein leere und damit nicht valide Liste aus. Kann man die Abfrage nicht so modifizieren, das sie im Falle keiner Pingbacks auch nichts ausgibt (auch keine Überschrift)?

  18. Robert sagt:

    Davon bin ich auch ausgegangen, leider funktioniert das offenbar nicht. Der Code im Zusammenhang:

    	if ( empty($comments_by_type['pingback']) ) { ?>
    				
    				
    					
    				
    			

    Leider bekomme ich als Ausgabe immer die Überschrift und eine leere Tabelle. Ist das vielleicht ein php 4/5 Problem?

    • nein, empty ist kein PHP5 Problem und hier wird nur gefragt, ob es Einträge gibt, sonst gib nix aus, was in meinen Tests auch sauber klappt.

  19. Markus sagt:

    Hi Frank, ich kann das kleine Problem von Robert bestätigen. Sofern keine Tracks oder Pings vorhanden sind wird sowohl die Headline "Keine Trackback" bzw. "keine Pingback" ausgegeben als auch eine leere Liste (ol class pingbacklist bzw. ol class trackbacklist) ... Ich hab sowohl Deine Oiginal-comments.php als auch die functions.php des Basis-Themes probiert als auch den Code aus diesem Beitrag hier, das Ergebnis ist immer eine leere OL wenn keine Tracks oder Pings vorhanden sind ... Grüße, Markus

  20. Mark sagt:

    Danke Frank, das wars schon ... mit der Negierung funktioniert es. Bin gerade über dem Styling meiner Kommentare im neuen Template und gleich über eine weitere Sache gestolpert: Wie lassen sich die Kommentar-Nummern ausgeben? Mit der alten Kommentarfunktion ging das per php foreach ($comments as $comment) : $comment_count++; und dann an geeigneter Stelle per "echo count" ... das lässt sich doch bestimmt auch in Deiner Funktion einbauen, hab leider zu wenig Planung von PHP um da selbst rumzuschrauben 😉

  21. Markus sagt:

    Noch ein Nachtrag: Beim Bau meines Themes ist mir aufgefallen, dass bei Nutzung einer individuellen Ausgabe der Kommentare per Callback grundsätzlich ein schließendes /li ausgeben wird. Am Beispiel Deiner Funktion fb_theme_comment bedeutet das, dass man das schließende /li nicht notiert da WordPress diese aus irgendeinem Grund bereits selber ausgibt, ansonsten endet die Ausgabe mit zwei /li´s (WP-Bug?)

    Greets, Markus

  22. tarvos sagt:

    Ich hab das jetzt auch mal so eingebaut und hab bisher auch das Problem, dass bei der Kombination kein Trackback/Kommentar das ol Tag der Trackbacks angezeigt wird. Aber mir ist auch nicht so ganz klar, wieso die Abfrage empty($comments_by_type['trackback']) nicht negiert sein muss (obwohl dann entsprechend gar nichts angezeigt wird). Das Array sollte doch gerade nicht leer sein, damit der Fall eintritt. Gibt es da evtl. eine andere Möglichkeit abzufragen, ob Trackbacks/Kommentare vorhanden sind?

    Nebenbei: Das schließende /li Tag kommt durch die integrierte reply Funktion. Antwortet man auf ein Kommentar, wird dieser innerhalb des li Tags eingebunden.

  23. Alex sagt:

    Hello,

    I have some problems with reference from fb_update_comment_type_cache function with PHP 5.3.0.
    It works fine without it but I don't really know the utility of that function.

    Hope you speak english,
    Alex

  24. Alex sagt:

    Thanks for quick answer.

    And what's happen when I remove & from
    function fb_update_comment_type_cache(&$queried_posts)

    There is some incompatibility with reference in PHP 5.3.0

    Regards,
    Alex

  25. Alex sagt:

    Another problem, does not seem to work on attachments. Did you know about this or it's just me?

    Also, update_comment_type_cache() does not exists, it's fb_update_comment_type_cache() right?

    Regards,
    Alex

  26. Alex sagt:

    Thanks for the elucidation.
    Any clues about that attachments problem?

    Regards,
    Alex

  27. Alex sagt:

    Not really, the attachment default template is single.php
    For example on posts (single.php) comments/trackbacks number are displayed but on attachments (same template - single.php) are not.

  28. Alex sagt:

    Any ideas?

    • @Alex: i dont understand the problem with the attachments; please can you write more infos. My functions are filter for track-, pingbacks and comments, not attachments. Sorry and i hope you can send me your wish.

  29. Alex sagt:

    Yes, but you can add comments to attachments right?
    This is my problem.

    echo fb_get_comment_type_count('comment') ---- does not display anything on attachment page.

  30. Perun sagt:

    Hallo Frank,

    beim studieren deienes Codes ist mir die gleiche Frage wie bei Mark (#31) aufgekommen.

    Viele Grüße,
    Vlad

    • @Perun: im Code habe ich das aktuell nicht drin, in einer anderen Seite mache ich das via JS, da es nur dann Mehrwert ist, wenn JS aktiv ist:

      <script type="text/javascript">
      //<![CDATA[
      document.documentElement.className += " js";jQuery(document).ready( function($){var li=$('#kommentarbereich .tabs').size();if(li==2){$('#kommentarbereich').accessibleTabs({tabhead:"h6",tabbody:".tabs",fx:"fadeIn"});}$('.commentlist li').each(function(i){$(this).prepend('<span class="co-number">'+(i+1)+'<\/span>');})});
      //]]>
      </script>

      Der Schnippsel steht im Footer oder wird extern geladen, benötigt jQuery.

  31. Christian sagt:

    Danke für den Code! War genau das, wonach ich gesucht habe.

    Grüße
    Christian

© 2016, since 2005 bueltge.de [by:ltge.de] · Theme is built by ThemeShift