Wie viele hilfreichen Kommentatoren in meinem Post zur Tweet-This-Funktion für Wordpress-Themes richtig angemerkt haben, sollte man die gekürzten Urls irgendwie zwischenspeichern – weder will man TinyURL mit API-Requests überschwemmen, noch will man immer auf die Antwort von TinyURL warten. Entweder löst man das mit einem Cache-System, das Wordpress komplett betrifft (für eine solche Seite war das Plugin gedacht) oder mit etwas, das nur die Urls speichert. Für alle, die nicht ihr komplettes Blog cachen wollen, habe ich die Tweet-This-Funktion so umgebaut, dass die gekürzte Url in der Datenbank gespeichert wird.

/*
	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, $wpdb;
		$tinyurl = get_post_meta($post->ID, 'tinyurl', true);
		// Tinyurl nicht vorhanden? Also erzeugen und speichern!
		if(empty($tinyurl)){
			$url = get_permalink();
			$fp = fopen('http://tinyurl.com/api-create.php?url='.$url, 'r');
			if($fp){
				$tinyurl = fgets($fp);
			}
			fclose($fp);
			$wpdb->query("
				INSERT INTO $wpdb->postmeta
				(post_id, meta_key, meta_value)
				VALUES
				($post->ID, 'tinyurl', '$tinyurl')
			");
		}
		// Titel des Artikels kürzen
		$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>';
	}
}

Benutzung bleibt wie gehabt: irgendwo im Template <?php echo get_tweet_this_link() ?> einfügen und optional diese Parameter benutzen:

  • $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 sich die Parameter sparen