Popularity Contest Fix für WordPress 2.9
Die aktuelle Version 2.0b2 des sehr erfolgreichen WordPress-Plugins Popularity Contest funktioniert leider in der aktuellen WordPress-Version 2.9.2 nicht ganz sauber. Die beiden Bugs, die mir aufgefallen sind, sind zum Einen der mangelhafte Reset der “Comments/ Trackback/ Pingback Counts”, zum Anderen zählt das Plugin die Seitenaufrufe nicht.
Die nachfolgende Anleitung behebt diese beiden Bugs durch kleine Änderungen am Code. Zu beachten ist, dass die zweite Änderung nicht funktioniert, wenn ein CachePlugin für WP eingesetzt wird. Es ist demzufolge kein Bugfix, sondern ein Workaround. Ich hoffe, mit dieser Anleitung trotzdem einigen Leuten helfen zu können. Ein richtiges Bugfix reiche ich in den nächsten Tagen möglicherweise nach. Die Anleitung bezieht sich auf die Datei
wp-content/plugins/popularity-contest/popularity-contest.php
Diese Datei ist wie üblich mit einem Editor zu öffnen und diese beiden Änderungen sind vorzunehmen:
1. Suche die folgende Zeile (772?)
$this->populate_post_data($post_id);
und ersetze sie durch
$this->populate_post_data($post_id->ID);
Damit wäre schonmal der Reset-Bug behoben.
2. Die fehlerhafte Zählung der Seitenaufrufe hängt offenbar damit zusammen, dass die Seitenaufrufe üblicherweise durch einen Ajax-Aufruf gezählt werden, der in der Kombination des Plugins mit WordPress 2.9.2 offenbar nicht (richtig) funktioniert. Hierzu kann man einfach den Ajax-Request abschalten, sodass die Zählung im PHP-Code stattfindet. Ersetze dazu die Zeile
@define('AKPC_USE_API', 1);
durch
@define('AKPC_USE_API', 0);
Danach sollte – sofern kein Cache-Plugin eingesetzt wird – alles (wieder) normal funktionieren. Der Autor des Plugins selbst schreibt dazu:
Setting this to 0 will cause popularity contest results to improperly tally when caching is turned on.
Wie dem auch sei … ich werde mich in den nächsten Tagen mal auf die Suche nach diesem mysteriösen Ajax-Aufruf machen und einen entsprechenden Bugfix nachreichen, damit Popularity Contest auch im aktuellen WP wieder mit Cache funktioniert.
UPDATE 22:41 Uhr: Okay … die fehlende Zählung der Seitenaufrufe lag daran, dass die Funktion
wp_footer();
im Template nicht eingebunden war (warum auch immer). Wer das gleiche Problem hat, kann sich also den obigen Schritt 2 sparen und in den Footer seines Template (am besten direkt vor </body>) den folgenden Code einfügen:
<?php wp_footer(); ?>
und schon geht alles wie gewohnt und gewünscht. :)
Popularität: 100%

