Wie man native comment_count durch Comments Evolved aggregate count ersetzt

Was ich versuche zu tun

Ich verwende ein Plug-in mit dem Namen “Comments Evolved”, das Kommentare gruppiert, die aus Faceook, G + und WordPress stammen.

Ich versuche, die native comments_number Nummer durch die Anzahl aus der Aggregatanzahl des Plugins zu ersetzen.

Das Problem

Ich möchte dies über functions.php tun, aber ich habe Probleme, da es scheint nur die Facebook-Kommentare zählen zu ziehen. Ich vermute, dass mein Filter nicht funktioniert hat und daher zieht er nur, was WordPress native ziehen würde.

Was ich versucht habe

Zur Zeit verwende ich diesen Filter:

 // Replace native comment count with Comments Evolved comment in native comments_number function function comments_evolved_number() { $number = comments_evolved_get_total_count(); } apply_filters('comments_number', 'comments_evolved_number'); 

aber es scheint nicht der Trick zu sein, da es nur die Anzahl der Kommentare im Facebook-Tab zeigt.

In meiner index.php verwende ich dies, um die Kommentare zu ziehen:

   

Ich habe auch versucht, add_filter aber das scheint nichts zu tun, da die Kommentare überhaupt nicht ausgegeben werden. Ich habe überall gesucht, Foren, WordPress Codex, Plugin GitHub, und sogar durch ähnliche Themen mit Disqus Kommentare, aber ich kann nicht den Grund finden, dass mein Filter fehlschlägt.

Was mache ich falsch?

AKTUALISIEREN 1

Die Antwort von user birgire ist viel sauberer, logischer und besser als jede Antwort, die ich mir vorstellen kann, aber aus irgendeinem Grund funktioniert das nur teilweise.

Beim Testen scheint es nicht die Anzahl der Facebook-Kommentare zu ziehen, obwohl es den ganzen Rest zieht und aggregiert.

Kommentare Evolved konstruiert comments_evolved_get_total_count() wie folgt: function comments_evolved_get_total_count () {$ total_count = 0;

  $wordpress_count = comments_evolved_get_wordpress_count(); //$wordpress_count = get_comments_number(); $gplus_count = comments_evolved_get_gplus_count(); $trackback_count = comments_evolved_get_trackback_count(); $facebook_count = comments_evolved_get_facebook_count(); $disqus_count = comments_evolved_get_disqus_count(); $total_count = $total_count + $wordpress_count + $gplus_count + $trackback_count + $facebook_count + $disqus_count; return $total_count; } //add_filter('get_comments_number', 'comments_evolved_get_total_count', 4269); 

Das Facebook comments_evolved_get_facebook_count() ist folgendermaßen aufgebaut:

 function comments_evolved_get_facebook_count($url = "") { if(empty($url)){ $url = get_permalink(); } $link = 'https://graph.facebook.com/?ids=' . urlencode($url); $link_body = wp_remote_retrieve_body(wp_remote_get($link)); $json = json_decode($link_body); return $json->$url->comments; } 

Ich sehe darin keine Fehler und an anderen Stellen zieht es die richtige Facebook-Zahl (ich denke – nicht sicher).

Was funktioniert, scheint aber nicht effizient / zufriedenstellend zu sein

 function comment_count_agg() { $total_count = 0; //$wordpress_count = comments_evolved_get_wordpress_count(); $wordpress_count = get_comments_number(); $gplus_count = comments_evolved_get_gplus_count(); $trackback_count = comments_evolved_get_trackback_count(); $facebook_count = comments_evolved_get_facebook_count(); $disqus_count = comments_evolved_get_disqus_count(); $total_count = $total_count + $wordpress_count + $gplus_count + $trackback_count + $facebook_count + $disqus_count; return $total_count; } add_filter('comments_evolved_get_total_count', 'comment_count_agg', 4270); add_filter('get_comments_number', 'comments_evolved_get_total_count', 4271); 

… obwohl ich nicht genau weiß warum.

Ich habe es auf diese Weise versucht, weil (a) ich etwas im Plug-in gefunden habe, das mit der Aggregationszählung spielt, bevor Birgires Filter angewendet wird und (b) weil ich dachte, dass die Prioritäten irgendwie ein Problem waren.

Kannst du mir sagen, warum meine chaotische function funktioniert, aber birgire’s nicht, und wenn es einen Weg gibt, kann ich es effizienter machen?

UPDATE 2

Die Antwort von birgire ist in der Tat voll und richtig, aber die Anzahl der Facebook-Kommentare wurde einfach nicht berücksichtigt, da die Domäne, an der ich arbeitete, über dem Open Graph API-Aufruflimit lag.

Der Fehler, den ich über das zurückgegebene JSOn-Objekt von Facebook bekam, war:

 stdClass Object ( [error] => stdClass Object ( [message] => (#4) Application request limit reached [type] => OAuthException [is_transient] => 1 [code] => 4 [fbtrace_id] => AgE3COAZ+tj ) ) 

Ich habe hier eine detaillierte Antwort bezüglich der Limits von FB OG API gegeben.

Solutions Collecting From Web of "Wie man native comment_count durch Comments Evolved aggregate count ersetzt"

Wenige Probleme hier.

  • Verwenden Sie add_filter() anstelle von apply_filters() , um Ihren benutzerdefinierten callback zu registrieren.

  • Gib den Wert im Callback deines Filters zurück.

  • Verwenden Sie den Filter get_comments_number anstelle des Filters comments_number , da Sie nur die Zahl und nicht die gesamte Ausgabe der function comments_number() ändern möchten.

  • Setzen Sie den Namen Ihrer benutzerdefinierten callbacke voran, um mögliche Namenskollisionen zu vermeiden.

Versuchen Sie stattdessen diese Version:

 function wpse_comments_evolved_number( $count ) { // Override the comment count if( function_exists( 'comments_evolved_get_total_count' ) ) $count = comments_evolved_get_total_count(); // We must then return the value: return $count; } add_filter( 'get_comments_number', 'wpse_comments_evolved_number'); 

Wir stellen sicher, dass die function comments_evolved_get_total_count() existiert. Wir möchten nicht die gesamte Seite herunterbringen, wenn dieses Plugin deinstalliert wird.

Hoffe, es funktioniert.