Wie bereits erwähnt, habe ich die letzen Tage an einem Plugin für WordPress gearbeitet, das die Social Buttons von Twitter, Facebook und Google+ datenschutzfreundlich eingebindet. Ich bin jetzt mit dem ersten Entwurf fertig, sodass ich jetzt einmal ein Feldversuch in meinem Blog starten möchte.
Die Social Buttons, die jetzt unter jedem Artikel gezeigt werden, sind nur nachgebaut und laden keinerlei Code von anderen Servern. Alles liegt auf meinem Server. Erst wenn ein Button angeklickt wird, wird der entsprechende Button von Facebook, Twitter oder Google geladen, auf den dann wiederum geklickt werden kann. Derzeit muss man zum „Liken“ also zweimal klicken. Die Auswahl-Box zwischen Share und Like Button, die sich darunter ausklappt, ist aber geplant. Mal sehen, wann ich dazu komme.
Wer Interesse am Code hat, kann sich ihn hier herunterladen:
Download wl Social Buttons 0.1.2
Update: Version 0.1.2 behebt eine XSS-Lücke. Danke an Oliver
Um die Social Buttons nach dem Aktivieren des Plugins in das Theme zu bekommen, muss an der gewünschten Stelle dieser Code eingefügt werden.
<?php do_action('wlsb'); ?>
Wie das ganze aussieht, siehst du hier am Ende des Artikels. Du kannst die frei fühlen, den Button deiner Wahl zu betätigen. 🙂
Das Plugin vereint im Wesentlichen die Funktionen des SocialDataGrabbers von macx und die JavaScript-Einbindung von dorianroy, die ich in diesem Artikel schon erwähnt hatte.
Das Plugin ist noch mit Vorsicht zu genießen. Wenn euch Fehler auffallen, die nicht sein dürften, würde ich mich über einen Hinweis freuen. Und wenn jemand Zeit und Lust zum Forken hat, kann er das gerne tun.
Kommentare
15 Antworten zu „wL Social Buttons 0.1“
$_GET[‚wlsb_gp_iframe‘] ist nicht abgesichert. Das reißt Dir ne fiese XSS Lücke in WordPress, weil Du kannst da alles reinladen. 🙁
Hier ist noch ne Demo http://bit.ly/mTfRrz
Awww, peinlich… Habe es mit Version 0.1.1 behoben.
Vielen vielen Dank für den kritischen Blick und den Hinweis.
Hm, das hat es jetzt nicht wirklich besser gemacht. 🙂
http://bit.ly/qzMqbV
War wohl schon zu spät gestern und wollte es mir einfach machen. Tut mir leid…
Jetzt ist ein preg_match eingebaut.
ich kann mich irren,aber ich glaube,Du hast da die erste Version hochgeladen:
$url = $_GET[‚wlsb_gp_iframe‘];
Zip-File war falsch benannt. 😛
Ist korrigiert. Danke.
Wäre es nicht generell sinniger, die css Dateien und die Scripte extern zu laden? Beim JS kann man noch viel zusammen fassen. Beim CSS auch.
Das kommt noch. Zurzeit macht mir noch der Google-Button Probleme, da die Anzahl der +1 nicht wirklich erkannt wird.
Du solltest flushSocialGraph an den Adminaccount binden oder besser nur alle paar Minute zulassen. Ansonsten könnte man den Webspace relativ schnell lahm legen, indem man dutzende Verbindungen öffnet. 🙂
Ja, du hast Recht. Danke für den Hinweis.
Ich habe die Funktion jetzt an den Admin-Account gehangen, indem ich die Abfrage in Zeile 552 erweitert habe:
if(isset($_GET['flushSocialGraph']) && $_GET['flushSocialGraph'] == 'flushAll' && current_user_can('administrator')) {
Wieso fändest du es nur alle paar Minuten besser? flushSocialGraph ist doch dazu da, um beim Debuggen schnell die Transient-expiration umgehen zu können.
Achso, ich hab das Plugin nicht installiert. Ich dachte, es wäre dafür den Zähler hochzusetzen. 🙂
Ich hab Dir mal das JS etwas verkleinert:
function wlsb_click_button(el, post_id, permalink, the_title) {
var container = document.getElementById(‚wlsb_’+el+’_button-‚+post_id);
if(el==’fb‘) var src = ‚http://www.facebook.com/plugins/like.php?href=’+permalink+’&layout=button_count&show_faces=false&width=150&action=recommend&colorscheme=light&height=25′;
else if(el==’tw‘) var src = ‚http://platform.twitter.com/widgets/tweet_button.html?url=’+permalink+’&text=’+the_title;
else if(el==’gp‘) var src = ‚?wlsb_gp_iframe=’+permalink;
frame = document.createElement(„IFRAME“);
frame.setAttribute(„src“, src);
frame.setAttribute(„scrolling“, „no“);
frame.setAttribute(„frameBorder“, 0);
frame.setAttribute(„allowTransparency“, true);
frame.style.border = „none“;
frame.style.overflow = „hidden“;
frame.style.width = „120px“;
frame.style.height = „20px“;
container.replaceChild(frame, document.getElementById(‚wlsb_’+el+’_a_button-‚+post_id));
}
Und dann alle Funktionsaufrufe ändern:
<span class="wlsb_tb" onclick="wlsb_click_button('tw', ID; ?>, “, “);“>
Vielen Dank für deine Hilfe. Ich werde es einpflegen. 🙂
[…] Update für wL Social Buttons Ich habe ein wenig weiter an dem Plugin wl Social Buttons für WordPress gearbeitet. Neben der verkleinerten JS-Funktion (Danke an Oliver) und dem Entfernen […]