Warning: Undefined variable $image_url in /var/www/htdocs/web1/puzich.com/wp-content/themes/puzich.com-2013-SSL/header.php on line 34 Warning: Trying to access array offset on null in /var/www/htdocs/web1/puzich.com/wp-content/themes/puzich.com-2013-SSL/header.php on line 34

Plugins hausgemacht

Vor einiger Zeit kam ich auf die Idee, meine WordPress Installation zu verschlanken und viele Plugins rauszuwerfen. Plugins bringen eine Menge Code mit, der für kleinere Funktionen vollkommen überflüssig ist. Beispiel dafür ist auch die Ausgabe der Shares bei Facebook des Artikels. WordPress Plugins dafür gibt es einige und diese bringen mehrere hundert Zeilen Code mit, die erst einmal durchgeackert werden müssen. Klar, dass dadurch die Webseite nicht performaneter wird.

Martin kam auf die gleiche Idee seine WordPress Installation zu verschlanken und setze bereits auf hausgemachte Funktionen. Das einzige was ihm noch zum absoluten Glück fehlte war eine Möglichkeit, wie er die Anzahl der Links herausbekommen kann, die bei Facebook auf seine Artikel gesetzt wurden – auch Shares genannt.

Einen Code-Schnippsel warf ihm sein Leser Andi vor die Füße, den ich aufnahm und daraus eine WordPress-Funktion samt Caching zu basteln. Martin hat bereits eine Anleitung dazu im Netz, hier nun meine Version.

Alle Dateien, die nun bearbeitet werden müssen, befinden sich im Theme Verzeichnis des aktuellen WordPress Themes. Folgender Code muss in die function.php kopiert werden. Wenn diese leer ist, einfach mit Copy & Paste reinpasten, ansonsten an das Ende setzen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// get Facebook shares
// call function in wordpress with default values
// echo getFBCount(get_the_ID(), 'share', 24);
// possible $counter values: share, like, comment, total, click
// $cachetime: time to cache the data in hours
function getFBCount($postid, $counter = 'share', $cachetime = 24) {
// check if $postid and $cachetime is int
if (!is_int($postid) || !is_int($cachetime) || $cachetime < 1) {
return 'values are not numeric';
}

// get permalink with postid
$link = get_permalink($postid);

// create post_meta name
$countername = sprintf("_fbcount%s", $counter);

// get cached data, if available
$cacheddata = get_post_meta($postid, $countername, true);

// if no cached data available or data is older than 24 hours, refresh/get data from facebook
if(!empty($cacheddata) && $cacheddata['timestamp'] + (60 * 60 * $cachetime) > time() ) {
$count = $cacheddata['count'];
} else {
$url = sprintf("http://api.facebook.com/restserver.php?method=links.getStats&urls=%s", $link);
$request = new WP_Http;
$result = $request->request($url);

$xml = simplexml_load_string($result['body']);

switch($counter) {
case 'share':
$count = (int)$xml->link_stat->share_count;
break;
case 'like':
$count = (int)$xml->link_stat->like_count;
break;
case 'comment':
$count = (int)$xml->link_stat->comment_count;
break;
case 'total':
$count = (int)$xml->link_stat->total_count;
break;
case 'click':
$count = (int)$xml->link_stat->click_count;
break;
default:
return 'not existing counter specified';
break;
}

if($count !== '' && is_int($count)) {
$metadata = array();
$metadata['timestamp'] = time();
$metadata['count'] = $count;
update_post_meta($postid, $countername, $metadata);
}
}

return $count;
}

Jetzt geht es nur noch darum, dass ein im Theme die Anzahl ausgegeben wird und ein Link vorhanden ist, um dem User die Möglichkeit zu geben, den Artikel bei Facebook zu sharen. Empfehlenswert ist es, diesen unter den Artikel einzufügen. Normalweise müssen hierfür die Theme-Dateien index.php und single.php geändert werden und die folgende Code-Zeile eingefügt werden. Wo genau in den beiden Dateien? Das bleibt dir überlassen.

Als erstes gibt man den Zähler aus. Mit der Funktion hat man die Möglichkeit alles abzufragen, was Facebook so rausrückt. In dem u. g. Beispiel kann man statt ’share‘ auch noch ‚like‘, ‚comment‘, ‚total‘ und ‚click‘ nutzen, ja nach gusto. Der letzte Wert (hier 24) gibt die Cache Dauer in Stunden an. Für wenig frequentierte Seiten sollte, meiner Meinung, nach ein Update pro Tag ausreichend sein, bei anderen entsprechend weniger. Beachtet, dass Facebook nur eine bestimmte Anzahl von Abfragen pro IP zulässt. Sollten keine Werte mehr geliefert werden, weil ihr das Limit erreicht habe, dann erhöht die Cachezeit etwas.

1
< ?php echo getFBCount(get_the_ID(), 'share', 24); ?>

Jetzt geht es nur noch darum, einen Link einzufügen, damit der User den Artikel bei Facebook sharen kann. Nichts einfacher als das, mit folgendem Link, der auch noch in die Theme Dateien eingefügt wird.

1
<a href="http://www.facebook.com/sharer.php?u=&lt;?php urlencode(the_permalink()); ?&gt;&amp;t=&lt; ?php urlencode(the_title()); ?">Shares</a>

Bis hierhin gefolgt und mitgelesen? Respekt! Wie ihr das ganze noch mit CSS aufhübscht, bleibt jedem selbst überlassen. Wenn noch Fragen sind, dann stellt diese in den Kommentaren.

Da ich das Ergebnis ganz gern selbst Erleben möchte, würde ich mich freuen, wenn ihr meinen Share-Button unter diesem Artikel nutzt und fleißig auf Twitter und Facebook shared.

PS: Falls es beim Copy & Paste des Codes Probleme geben sollte, kann den Code der in die function.php und in die single.php soll hier downloaden.

1 Kommentar » Schreibe einen Kommentar

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.