Es gibt viele Plugins, die eine Tweet-This-Funktion für Wordpress bereitstellen, also einen Link, der auf twitter.com verweist und automatisch einen Link zum gerade gelesenen Artikel in das Textfeld einfügt. Aber für so einen Kleinkram gleich ein eigenes Plugin installieren? Braucht man nicht, das kann man auch mit ein paar Zeilen in der functions.php
eines Themes machen. Gesagt, getan und weil sich @datenkind eine Veröffentlichung gewünscht hat, hier ist das Ding.
/*
Tweet-This-Link
*/
if(!function_exists('get_tweet_this_link')){
function get_tweet_this_link($message_template = 'Lese gerade: %TITLE %URL', $link_title='Artikel twittern', $title_length = 90){
global $post;
// Tinyurl holen
$url = get_permalink();
$fp = fopen('http://tinyurl.com/api-create.php?url='.$url, 'r');
if($fp){
$tinyurl = fgets($fp);
}
fclose($fp);
// Titel des Artikels kuerzen
$title = $post->post_title;
if(strlen($title) > $title_length){
$short_title = substr($title, 0, $title_length);
$short_title .= '...';
}
else {
$short_title = $title;
}
// Link erstellen
$message = str_replace(array('%TITLE', '%URL'), array($short_title, $tinyurl), $message_template);
$message = urlencode($message);
return '<a href="http://twitter.com/home?status='.$message.'">'.$link_title.'</a>';
}
}
Das Ganze gibt direkt einen fertigen Link zurück, den man nur noch mit echo
o.Ä. ausgeben muss. Alle drei Funktionsparameter sind optional bzw. mit Standardwerten ausgestattet:
$message_template
: Die Twitter-Nachricht mit den Platzhaltern %TITLE für den Artikeltitel und %URL für den Link. Beide werden automatisch eingefügt und gekürzt.$link_title
: Die Beschriftung des Links.$link_length
: Die maximale Länge des Titels, bevor er gekürzt wird.
Wer mit den Standards leben kann (Linktitel Artikel twittern
und Twitter-Nachricht Lese gerade: %TITLE %URL
) kann einfach irgendwo in seinem Post-Loop echo get_tweet_this_link();
einfügen.
Kommentare (11)
Micha ¶
2. März 2009, 14:37 Uhr
Interessantes Statement von DD32 (WordPress Entwickler) zu unserem ähnlichen Beitrag:
Bernd ¶
2. März 2009, 14:44 Uhr
Oder noch einfacher wie auf http://www.kick-image.at/weblog/05-02-2009/post-to-twitter-fuer-alle-webseiten zu sehen ;-)
Nico ¶
2. März 2009, 16:36 Uhr
Hmmm... Ich finde das zählt wieder zu diesen Funktionen die eh kaum einer benutzt, genau wie die Links zu den ganzen Networks wie delicious oder digg, ist denke ich relativ selten das jemand so einen Dienst benutzt der die Seite im Moment liest.
Ein kleiner Rechtschreibfehler hat sich eingeschlichen, oben nach bereitstellen ist noch ein m :)
datenkind ¶
2. März 2009, 17:59 Uhr
Danke für’s Posten, Peter. Finde solche Snippets immer hilfreich, deswegen hab ich neulich nach gefragt. :)
Peter ¶
2. März 2009, 18:13 Uhr
Zitat Micha:
Da hat er natürlich sehr recht! Ich selbst plane das auch nur auf einem Blog mit Cache einzusetzen und empfehle jedem, das auch so zu handhaben.
Zitat Bernd:
Ohne Titel des Blogposts? Doof.
Zitat Nico:
Danke, ist korrigiert.
Zitat datenkind:
Stets zu Diensten!
Reynhard ¶
2. März 2009, 18:33 Uhr
Zitat Bernd:
Ohne Titel des Blogposts? Doof.
Hallo
Dachte mit "&wptitel=<?php echo urlencode(get_the_title()) ?>" wird der Titel mitgschickt ;-)
Reynhard
Peter ¶
2. März 2009, 19:14 Uhr
Hm... stimmt... da hab ich wohl was überlesen :D Ups...
Ecki ¶
2. März 2009, 22:11 Uhr
Hey da komm ich mal zufällig hier her. Und bekomme einen wertvollen Tipp! Danke :)
Nathanael ¶
2. März 2009, 22:36 Uhr
Ähm, wenn ich das richtig sehe, wird die Zeile
$fp = fopen('http://tinyurl.com/api-create.php?url='.$url, 'r');
auf nach modernen Sicherheitsstandards eingerichteten PHP-Installationen am ausgeschalteten allow_url_fopen scheitern:
(siehe http://de.php.net/manual/de/function.fopen.php)
Hinzu kommt Michas in Kommentar #1 zitierter Einwand: Was für ein Denkfehler, einen externen Quasi-API-Call bei jedem Seitenaufruf standardmäßig durchzuführen statt dies nur bei Nutzung der Funktion zu tun (via Ajax oder wie auch immer). Zusätzlich müllt man Tinyurl mit u.U. ungenutzten Links voll.
Ich würde vorschlagen, ein Wordpress-PlugIn zu schreiben, das für jeden eigenen Eintrag standardmäßig auch eine KurzURL anlegt und in einem Cusom-Field speichert, vorzugsweise unter der eigenen Domain, zur Not auch bei Tinyurl und Konsorten.
Zu dem Thema hatte ich neulich was geschrieben: http://spackmat.de/spackblog/archives/617-Verkuerzte-URLs.html
andreas ¶
2. März 2009, 23:11 Uhr
@Nathanael:
Bei Wordpress könnte man ja auch einfach die Post-ID als url übernehmen: sollte
www . blogname . de/&post=477/
nicht auch funktionieren? Allerdings ist das genauso wenig aussagekräftig wie Tinyurl, aber man sieht auf Twitter wenigstens sofort, wo man hingeschickt wird.
Die Idee mit der eigenen KurzURL ist natürlich auch gut, was ist das aber für ein Aufwand, das für die ganzen alten Posts zu machen? Oder gibt's da eine elegante einfache Lösung für?
Ich hab' die Tweet-This-Link-Funktion (vielen Dank dafür übrigens!) jetzt einfach in das Skript von Speichern-und-Weitersagen gepackt, dann wird's nur noch aufgerufen, wenn's auch wirklich benötigt wird :)
Nathanael ¶
2. März 2009, 23:29 Uhr
@Andreas: Ein tinyurl.com/x1y5z ist INHO weniger aussagekräftig als ein domain.tld/s/616, aber hast Du ja schon selber gesagt.
Alte Posts sollten kein Problem sein, da mein Vorschlag diese nicht anfassen muss. Ich denke es ist nur ein kleiner Eingriff in die Funktion zum URL-Rewrite oder wenn das zu Hack ist kann man auch in der .htaccess entsprechend auf ein eigenes Script umleiten, dass die Umleitung nach Routingregeln regelt. Die Post-ID sollte jedem Blogsystem als Identifikator reichen und im Template stets zur verfügung stehen, so dass nur hier eine kleine Anpassung nötig wäre. Der Tweet-This Link wäre also - genau wie bei der Lösung über ein extra tiunyurl-Feld eine reine Template-Lösung, was die Performance nicht weiter beeinträchtigen sollte und man braucht auch keine AJAX-Calls oder was auch immer.
Oder habe ich da einen Denkfehler? Kenne Wordpress nicht genug von innen, um das definitiv zu sagen.