Hinweis: Dies ist mein privater Blog.
Für Software-Entwicklung und Refactoring siehe weigandtlabs.de.

wL Social Buttons 0.1

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.


Beitrag veröffentlicht

in

,

von

Kommentare

15 Antworten zu „wL Social Buttons 0.1“

  1. Avatar von Oliver

    $_GET[‚wlsb_gp_iframe‘] ist nicht abgesichert. Das reißt Dir ne fiese XSS Lücke in WordPress, weil Du kannst da alles reinladen. 🙁

    1. Avatar von Oliver

      Hier ist noch ne Demo http://bit.ly/mTfRrz

    2. Avatar von Artur

      Awww, peinlich… Habe es mit Version 0.1.1 behoben.
      Vielen vielen Dank für den kritischen Blick und den Hinweis.

      1. Avatar von Oliver

        Hm, das hat es jetzt nicht wirklich besser gemacht. 🙂

        http://bit.ly/qzMqbV

      2. Avatar von Artur

        War wohl schon zu spät gestern und wollte es mir einfach machen. Tut mir leid…

        Jetzt ist ein preg_match eingebaut.

      3. Avatar von Oliver

        ich kann mich irren,aber ich glaube,Du hast da die erste Version hochgeladen:

        $url = $_GET[‚wlsb_gp_iframe‘];

      4. Avatar von Artur

        Zip-File war falsch benannt. 😛
        Ist korrigiert. Danke.

  2. Avatar von Oliver

    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.

    1. Avatar von Artur

      Das kommt noch. Zurzeit macht mir noch der Google-Button Probleme, da die Anzahl der +1 nicht wirklich erkannt wird.

      1. Avatar von Oliver

        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. 🙂

      2. Avatar von Artur

        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.

      3. Avatar von Oliver

        Achso, ich hab das Plugin nicht installiert. Ich dachte, es wäre dafür den Zähler hochzusetzen. 🙂

  3. Avatar von Oliver

    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; ?>, “, “);“>

    1. Avatar von Artur

      Vielen Dank für deine Hilfe. Ich werde es einpflegen. 🙂

  4. […] 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 […]