Flattr Button für WordPress ohne Plugin

Aktuell ist Flattr in aller Munde und die Idee ist sicher einen Test wert, wie ich mich überzeugen lassen habe. Mal soll nur sein Urteil fällen, wenn man weiß, um was es geht und darum wollte auch ich Flattr testen und in das Blog integrieren. Allerdings sagt mit das Plugin nicht so zu und so ist eine kleine Funktion entstanden, die den Button integriert.

Flattr Logo
Aktuell ist Flattr in aller Munde und die Idee ist sicher einen Test wert, wie ich mich überzeugen lassen habe. Mal soll nur sein Urteil fällen, wenn man weiß, um was es geht und darum wollte auch ich Flattr testen und in das Blog integrieren. Allerdings sagt mit das Plugin nicht so zu und so ist eine kleine Funktion entstanden, die den Button integriert.

Die Funktion

Die folgenden kleine Funktion gehört in die functions.php des Themes oder auch in ein Plugin ausgelagert. Hier ist eurer Wissen gefragt - für mich ist es Theme-spezifisch und damit eine Funktion des Themes und damit in der functions.php des Themes.


/**
 * Flattr Button in WordPress Templates
 *
 * @author Frank Bültge
 * @link   Flattr API https://flattr.com/support/api
 * @param  integer  $uid   personal user ID
 * @param  string   $cat   Flattr category: text, images, video, audio, software or rest. 
 * @param  string   $btn   Type of Flattr button: '' or 'compact'
 * @param  integer  $hide  Use this to hide the thing from listings on flattr.com. The value 1 will hide the thing. 
 *
 */
function fb_flattr_link($uid = '', $cat = 'text', $btn = 'compact', $hide = 0) {
	
	$uid  = (int) $uid;
	$cat  = htmlspecialchars($cat);
	$btn  = htmlspecialchars($btn);
	$hide = (int) $hide;
	
	$noflattr = 0;
	$noflattr = (int) get_post_meta( get_the_ID(), 'noflattr', true );
	
	if ( !$uid )
		$uid = (int) get_post_meta( get_the_ID(), 'flattrid', true );
	
	if ( defined('WPLANG') )
		$locale = WPLANG;
	if ( empty($locale) )
		$locale = 'en_US';
		
	$ftag = '';
	$tags = get_the_tags( get_the_ID() );
	if ( $tags ) {
		foreach( $tags as $tag ) {
			$ftag .= $tag->name . ', ';
		}
		$ftag = substr( $ftag, 0, -2 );
	} else {
		$tag = '';
	}
	
	$dsc = htmlspecialchars( wp_strip_all_tags( trim( get_the_excerpt() ), TRUE ) );
	$dsc = str_replace( "'", "", $dsc );
	$dsc = str_replace( "\n", " ", $dsc ); // maybe \r\n
	
	$tle = htmlspecialchars( strip_tags( get_the_title() ) );
	$tle = str_replace( "'", "", $tle );
	$tle = str_replace(":", "", $tle);

	$flattr = '
	<span class="flattr">
		<script type="text/javascript">
			var flattr_uid  = \'' . $uid . '\';
			var flattr_url  = \'' . get_permalink() . '\';
			var flattr_tle  = \'' . $tle . '\';
			var flattr_dsc  = \'' . $dsc . '\';
			var flattr_cat  = \'' . $cat . '\';
			var flattr_lng  = \'' . $locale . '\';
			var flattr_tag  = \'' . $ftag . '\';
			var flattr_btn  = \'' . $btn . '\';
			var flattr_hide = ' . $hide . ';
		</script>
		<script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>
	</span>
	';
	
	if ( !$noflattr && ( 0 != $uid ) )
		echo $flattr;
}

Die Verwendung

Innerhalb des Templates für die Beiträge, kommt dann die obige Funktion als Aufruf; in der Regel sollte der Aufruf in die single.php des Themes.


<?php if ( function_exists('fb_flattr_link') ) fb_flattr_link($uid = 'DEINE_UID'); ?>

Es gibt im Code eine Abfrage, die ein benutzerdefiniertes Feld mit dem Namen flattrid abfragt. In diesem kann man eine ID mitgeben, so dass der Button in Abhängigkeit unterschiedlicher Autoren genutzt werden kann. Man muss dann die obige Funktion ohne die Übergabe des Parameters $uid nutzen, wie folgt:


<?php if ( function_exists('fb_flattr_link') ) fb_flattr_link(); ?>

Eine Ausgabe erscheint dann nur, wenn eine ID zum Feld flattrid gepflegt ist und wenn das nachfolgende Feld noflattr ungleich 1 ist.

Ich habe noch ein benutzerdefiniertes Feld eingefügt - wenn man dies nutzt, als noflattr eingeben und als Wert 1, dann wird der Button nicht ausgegeben. Ich denke, es gibt Beiträge, die brauchen keinen Flattr-Button, weil zum Beispiel der Content von anderen Leuten ist.

benutzerdef. Feld in WordPress für die Deaktivierung des Flattr-Button

Der Button wird innerhalb des span-Elementes mit der Klasse flattr ausgegeben und kann so via CSS angesprochen werden, kleines Beispiel.


.flattr {
margin: 5px 0 0 5px;
}

Die Funktion kann in vielen Bereichen ausgebaut werden, zum Beispiel gibt es sicher die Überlegung, dass man die ID mitgibt, so dass Blogs mit unterschiedlichen Autoren immer den Button zum jeweiligen Autor bekommen - eine beutzerdef. Feld für die ID kann da helfen ist nun schon drin; die schönere Lösung wäre ein Profilfeld am Autor, welches dann in Abhängigkeit des Autors eines Beitrags gezogen wird - aber Flattr stellt ein Plugin, darum sollten die sich kümmern.

Ebenso könnte man alles in MetaBoxen auslagern (wie beispielsweise im Plugin Different Type gezeigt), damit benutzerfreundlicher machen und automatisiert vor den Content hängen oder in den Feed. Wobei der Feed ja so eine Sache ist, dient er doch dem Datentausch. Da Flattr aber eigene Plugins bereit stellt, wollte ich kein Plugin bauen und wer mag, nutzt die Funktion und erweitert sie sich entsprechend, wenn der jetzige Umfang nicht reicht.

Kommentare sind geschlossen.