<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Schweizer WordPress Magazin &#187; Anleitungen</title>
	<atom:link href="http://wp-magazin.ch/kategorie/anleitungen/feed/" rel="self" type="application/rss+xml" />
	<link>http://wp-magazin.ch</link>
	<description>WordPress verstehen und anwenden</description>
	<lastBuildDate>Mon, 30 Jan 2012 14:19:22 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>How-To: Video Thumbnails automatisch laden mit oEmbed</title>
		<link>http://wp-magazin.ch/blog/video-thumbnails-automatisch-laden-oembed-4740/</link>
		<comments>http://wp-magazin.ch/blog/video-thumbnails-automatisch-laden-oembed-4740/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 16:19:43 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[oEmbed]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Thumbnails]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=4740</guid>
		<description><![CDATA[Mit WordPress 2.9 wurde die Möglichkeit eingeführt, Videos einer Vielzahl von Websites ohne grossen Aufwand einzubinden. Das Ganze funktioniert mit der sogenannten oEmbed Technik. Diese habe ich mir für die folgende Aufgabe zu Nutzen gemacht.]]></description>
			<content:encoded><![CDATA[<p>Mit WordPress 2.9 wurde die Möglichkeit eingeführt, Videos einer Vielzahl von Websites ohne grossen Aufwand einzubinden. Dazu muss man lediglich die URL eines Videos auf einer einzelnen Zeile einfügen, danach kann man ganz normal mit dem Schreiben fortfahren. Das Ganze funktioniert mit der sogenannten <a title="oEmbed" href="http://oembed.com/" target="_blank">oEmbed Technik</a>. Diese habe ich mir für die folgende Herausforderung zu Nutzen gemacht.</p>
<div id="attachment_4807" class="wp-caption alignright" style="width: 160px"><a href="http://wp-magazin.ch/blog/video-thumbnails-automatisch-laden-oembed-4740/vimeo/" rel="attachment wp-att-4807"><img src="http://wp-magazin.ch/wp-content/uploads/vimeo-150x150.jpg" alt="Vimeo" title="Vimeo" width="150" height="150" class="size-thumbnail wp-image-4807" /></a><p class="wp-caption-text">Vimeo</p></div>
<h3>Anforderung</h3>
<p>Für eine aktuelle Aufgabe suchte ich einen Weg, um einfach Vimeo Videos auf einem Blog zu veröffentlichen. Die Umsetzung erforderte einige Details, sodass rasch Custom Post Types eingesetzt wurden. Bei diesem Post Type gibt es dann eine Meta Box, bei welchem einfach die URL zum Video angegeben werden kann. Diese wird dann verwendet, um einerseits das Video auszugeben und andererseits auch direkt das Standbild des Videos als Post Thumbnail zu speichern.</p>
<h4>oEmbed</h4>
<p>oEmbed ist ein Format für die eingebettete Darstellung einer URL auf anderen Websites. Mit seiner simplen API können Websites eingebettete Inhalte wie Fotos und Videos einfügen, indem ein User bloss den Link dazu einfügen muss. Dazu definiert der Anbieter ein Muster, wie seine URLs aufgebaut sind, auf welches dann WordPress die URL untersuchen kann. Wird festgestellt, dass es eine gültige URL zu einem Vimeo Video ist, wird deren API aufgerufen.</p>
<p>Weitere Informationen zum Einfügen von Videos in WordPress gibt es im <a title="WordPress Codex - Embeds" href="http://codex.wordpress.org/Embeds" target="_blank">WordPress Codex</a>. Es gibt auch eine Dokumentation der <a title="Vimeo - oEmbed API" href="http://vimeo.com/api/docs/oembed" target="_blank">Vimeo oEmbed API</a>.</p>
<h3>Umsetzung</h3>
<p>Bei der Umsetzung war ich darüber erstaunt, wie viele Zeilen Code es schlussendlich benötigte, um das Ganze zum Laufen zu bringen. Doch fangen wir einmal von vorne an. Zu Beginn habe ich ein neues Must-Use Plugin (PHP-Datei im mu-plugins Ordner) erstellt und dort folgenden Code eingefügt:</p>
<pre><code>&lt;?php
add_action( 'publish_video', 'wpm_publish_video' ); // 'publish_post' bei normalen Posts

/**
 * Diese Funktion wird beim Publizieren eines Posts aufgerufen,
 * damit wir ein das Post Thumbnail hinzufügen können
 *
 * @param int $post_id Die ID des Posts
 */
function wpm_publish_video( $post_id ) {
	global $wpdb; // Datenbank-Objekt laden

	// Reine Vorsichtsmassnahme
	if ( 'video' !== get_post_type( $post_id ) )
		return false;

	// Nur fortfahren, wenn eine URL angegeben wurde und es noch kein Post Thumbnail gibt
	if ( '' === get_post_meta( $post_id, '_thumbnail_id', true ) || '' === $video = get_post_meta( $post_id, '_vimeo_url', true ) )
		return false;

}
?&gt;</code></pre>
<p>Mit dieser Funktion klinken wir uns erst in den Publizierungs-Vorgang des Beitrags (in diesem Fall vom Post Type <code>video</code>) ein und laden das WordPress Datenbank-Objekt. Mit der zweiten If-Abfrage stellen wir sicher, dass noch kein Post Thumbnail gesetzt wurde und dass eine Video URL angegeben wurde.</p>
<p>Als nächsten Schritt kann man dann die Informationen zum Video von Vimeo laden. Mir reicht daher eine einfache Abfrage einer einzigen URL. Möchte man aber beispielsweise automatisch auch andere Provider wie YouTube unterstützen, sollte man sich die <code>WP_oEmbed</code> Klasse in der Datei <code>wp-includes/class-oembed.php</code> etwas genauer ansehen, da dort die regulären Ausdrücke und die nötigen Methoden beschrieben sind.</p>
<pre><code>$url = "http://vimeo.com/api/oembed.json?url=$video";
// Video Infos laden
if ( ! $response = wp_remote_retrieve_body( wp_remote_get( $url ) ) )
	return false;

$json = json_decode( $response );
// JSON parsen
if ( null === $json )
	return false;</code></pre>
<p>Dieser Abschnitt, der direkt nach der Prüfung des Post Thumbnails eingefügt wird, holt nun also die Informationen zu einem Video, mit <code>wp_remote_body</code> laden wir auch nur den Body und nicht noch die HTTP Header. Falls diese Funktion einen Fehler zurückgibt, beenden wir auch unsere Funktion, denn ohne Inhalt können wir ja nichts anfangen. Danach wandeln wir nur noch den JSON String in ein PHP Objekt um und fahren nur im Erfolgsfall fort.</p>
<p>Die Rückgabe der API sieht übrigens wie folgt aus (bei XML). Uns interessiert dabei das Feld <code>thumbnail_url</code>, wenn man möchte kann man aber auch noch über <code>thumbnail_width</code> und <code>thumbnail_height</code> die Bildmasse auslesen.</p>
<div id="attachment_4802" class="wp-caption aligncenter" style="width: 610px"><a href="http://wp-magazin.ch/blog/video-thumbnails-automatisch-laden-oembed-4740/vimeo-oembed-api-xml/" rel="attachment wp-att-4802"><img src="http://wp-magazin.ch/wp-content/uploads/vimeo-oembed-api-xml-600x364.png" alt="Vimeo oEmbed API Resultat (XML)" title="Vimeo oEmbed API Resultat (XML)" width="600" height="364" class="size-large wp-image-4802" /></a><p class="wp-caption-text">Das kriegen wir von Vimeo zurück</p></div>
<p>Jetzt muss man ja eigentlich nur noch das Bild laden und als Post Thumbnail speichern. Klingt zwar einfach, aber es war doch umfangreicher als ich zuerst gedacht habe. Ich habe das deshalb in eine zweite Funktion ausgelagert.</p>
<pre><code>// Standbild URL und Titel des Videos auslesen
$thumbnail_url = $json->thumbnail_url;
$title = $json->title;
// *Magic*
$wp_thumb_id = wpm_generate_post_thumbnail( $post_id, $thumbnail_url, $title );
if ( ! $wp_thumb_id )
	return false;

// Thumbnail ID setzen
update_post_meta( $post_id, '_thumbnail_id', $wp_thumb_id );</code></pre>
<p>In der neuen Funktion <code>wpm_generate_post_thumbnail</code> müssen wir nun das Bild aufrufen und unter dem richtigen Dateinamen in WordPress hochladen, wofür es praktischerweise die Hilfsfunktion <code>wp_upload_bits</code> gibt. Danach muss dann das Standbild als Attachment eingetragen werden, was jedoch auch ein paar Kniffe benötigt.</p>
<pre><code>/**
 * Post Thumbnail hinzufügen von einer bestimmten URL
 */
function wpm_generate_post_thumbnail( $post_id, $url, $title = '' ) {
	if ( ! $response = wp_remote_retrieve_body( wp_remote_get( $url ) ) )
		return false;

	// Dateinamen herausfiltern
	$filename = substr( $url, ( strrpos( $url, '/' ) ) +1 );

	// Datei in WordPress hochladen
	$upload = wp_upload_bits( $filename, null, $response );
	if ( false !== $upload['error'] )
		return false;

	// MIME Type überprüfen, zurückgeben
	$filetype = wp_check_filetype( $filename );

	// Informationen zum Attachment
	$attachment = array(
		'post_mime_type' => $filetype['type'],
		'guid' => $upload['url'],
		'post_title' => $title,
		'post_content' => '', // z.B. Video Beschreibung
	);
	// Attachment einfügen
	$thumb_id = wp_insert_attachment( $attachment, $upload['file'], $post_id );
	if ( is_wp_error( $thumb_id ) )
		return false;

	// Für die Verknüpfung mit dem Beitrag müssen wir diese Klasse laden
	require_once(ABSPATH . '/wp-admin/includes/image.php');
	// Attachment mit Post verknüpfen
	wp_update_attachment_metadata( $thumb_id, wp_generate_attachment_metadata( $thumb_id, $upload['file'] ) );
	return $thumb_id;
}</code></pre>
<p>Mit diesen zwei Funktionen kann man nun ein Custom Field auslesen, die nötigen Informationen zum Video laden und das Standbild schliesslich als Post Thumbnail verwenden. Dies alles mit nur einem Mausklick beim Veröffentlichen des Artikels. Und das Beste daran: Funktioniert es einmal nicht oder das Standbild wurde geändert, kann man das vorhandene Thumbnail entfernen und einfach den Beitrag nochmals speichern.</p>
<p>Ich habe den Code einfach so aus dem Plugin kopiert, falls es also nicht funktioniert, einfach sagen. Bestimmt kann man das Ganze auch vereinfachen, bin also für jeden Ratschlag dankbar.</p>
<p>Nachtrag: Selbstverständlich dürft ihr auch noch sehen, wie das Ganze dann im Backend aussieht. Nichts Spezielles, ich habe zum Testen mal ein <a href="http://vimeo.com/31440895" title="Vimeo - Neue Website für Dominique Gisin" target="_blank">Video</a> von Marcel Widmer genommen.</p>
<div id="attachment_4816" class="wp-caption aligncenter" style="width: 610px"><a href="http://wp-magazin.ch/blog/video-thumbnails-automatisch-laden-oembed-4740/vimeo-oembed-resultat/" rel="attachment wp-att-4816"><img src="http://wp-magazin.ch/wp-content/uploads/vimeo-oembed-resultat-600x400.png" alt="Thumbnail via oEmbed Thumbnail" title="Thumbnail via oEmbed Thumbnail" width="600" height="400" class="size-large wp-image-4816" /></a><p class="wp-caption-text">Thumbnail via oEmbed Thumbnail</p></div>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/video-thumbnails-automatisch-laden-oembed-4740/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How-To: Anzahl Facebook-Fans im Blog anzeigen</title>
		<link>http://wp-magazin.ch/blog/anzahl-facebook-fans-anzeigen-4363/</link>
		<comments>http://wp-magazin.ch/blog/anzahl-facebook-fans-anzeigen-4363/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 07:00:11 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Transients]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=4363</guid>
		<description><![CDATA[Heute zeige ich euch, wie man mit einfachen Mitteln die Anzahl Fans seiner Facebook-Seite im Blog ausgeben kann. Alles, was man dazu benötigt, ist das Facebook PHP-SDK sowie ein paar Zeilen Code. Dies passt hervorragend in ein Plugin, geht aber auch in eurem Theme.]]></description>
			<content:encoded><![CDATA[<p>Heute zeige ich euch, wie man mit einfachen Mitteln die Anzahl Fans seiner Facebook-Seite im Blog ausgeben kann. Alles, was man dazu benötigt, ist das <a title="Facebook PHP-SDK" href="https://github.com/facebook/php-sdk/" target="_blank">Facebook PHP-SDK</a> sowie ein paar Zeilen Code. Dies passt hervorragend in ein Plugin, geht aber auch in eurem Theme.</p>
<div id="attachment_4424" class="wp-caption aligncenter" style="width: 330px"><a href="http://wp-magazin.ch/wp-content/uploads/fbfans-sidebar.png"><img class="size-full wp-image-4424 " title="Anzahl Facebook-Fans in der Sidebar" src="http://wp-magazin.ch/wp-content/uploads/fbfans-sidebar.png" alt="Anzahl Facebook-Fans in der Sidebar" width="320" height="100" /></a><p class="wp-caption-text">Anzahl Facebook-Fans in der Sidebar</p></div>
<p>Hierfür erstellen wir einen eigenen Hook, der kann zum Beispiel <code>wpm_fb_fans_count</code> lauten. Aber kommen wir zurück zum Facebook SDK. Es besteht aus einer einzigen Datei, deshalb passt es gut in einen Unterordner eures Plugins resp. Themes. Mit einer einzelnen Zeile kann man es dann einbinden:</p>
<pre><code>&lt;?php require_once('facebook.php');&gt;</code></pre>
<p>Jetzt muss man eine neue Instanz der Klasse erstellen. Dazu benötigt man eine <a title="Schweizer WordPress Magazin - How-To: Facebook IFrame Landing Page Anwendung erstellen" href="http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/" target="_blank">Facebook Applikation</a>. Von der Applikation brauchen wir die App-ID sowie den Geheimschlüssel.</p>
<pre><code>$facebook = new Facebook(array(
	'appId' =&gt; 'xxx', // Applikations-ID
	'secret' =&gt; 'xxx', // Geheimschlüssel
	'cookie' =&gt; true,
));</code></pre>
<p>Die Fan-Anzahl ermitteln wir mit Hilfe der <a title="Facebook-Entwickler - Facebook Query Language" href="http://developers.facebook.com/docs/reference/fql/" target="_blank">Facebook Query Language</a>, kurz FQL. Dazu benötigen wir noch die ID der Fanseite. Diese findet man heraus, indem man beispielsweise mit der Maus über den Button <em>Seite bearbeiten</em> fährt.</p>
<pre><code>$result = $facebook-&gt;api(array(
	'method' =&gt; 'fql.query',
	'query' =&gt; 'select fan_count from page where page_id = 123456;' // Eure Seiten-ID
));

echo intval($result[0]['fan_count']);</code></pre>
<div id="attachment_4426" class="wp-caption alignright" style="width: 160px"><a href="http://www.facebook.com/wpmagazin"><img class="size-thumbnail wp-image-4426" title="Facebook - WordPress Magazin" src="http://wp-magazin.ch/wp-content/uploads/facebook-wpmagazin-150x150.png" alt="Facebook - WordPress Magazin" width="150" height="150" /></a><p class="wp-caption-text">Wir auf Facebook</p></div>
<p>Wir sind jetzt allerdings noch nicht fertig. Erstens müssen wir unseren Hook noch benutzen, zweitens wollen wir die Zahl auch cachen, damit sie nicht bei jedem Aufruf neu geladen wird.<br />
WordPress kommt uns beim Caching mit der Transients API entgegen, mit welcher man Werte eine bestimmte Zeit lang speichern kann. Das heisst, unsere Fan-Anzahl wird nur alle paar Stunden neu ermittelt, was sich natürlich positiv auf die Geschwindigkeit des Blogs auswirkt.</p>
<h3>Das Resultat</h3>
<p>Fügen wir alle Zeilen zusammen und meistern auch noch die letzten Hürden, sieht unser fertiges Script so aus:</p>
<pre><code>&lt;?php
function wpm_show_fb_fans() {

	/* Existiert Transient-Wert? Wenn nein, neu laden */
	if ( false == ( $count = get_transient( 'wpm_fb_fans_count' ) ) ) {

		/* Facebook SDK einbinden (hier in einem Plugin) */
		$plugindir = WP_PLUGIN_DIR.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
		require_once($plugindir . '/facebook.php');

		/* Neue Instanz des SDKs */
		$facebook = new Facebook(array(
			'appId' =&gt; 'xxx', // Applikations-ID
			'secret' =&gt; 'xxx', // Geheimschlüssel
			'cookie' =&gt; true,
		));

		/* FQL Query: Fan-Anzahl einer bestimmten Seite */
		$result = $facebook-&gt;api(array(
			'method' =&gt; 'fql.query',
			'query' =&gt; 'select fan_count from page where page_id = 123456;'
		));

		/* Result in Variable $count speichern */
		$count = intval($result[0]['fan_count']);

		/* Dauer in Sekunden (hier: 3 Stunden) */
		$expiration = 60 * 60 * 3;

		/* Transient setzten */
		set_transient(
		  'wpm_fb_fans_count',
		  $count,
		  $expiration
		);
	}

	/* Ausgabe der Fan-Anzahl */
	echo $count;
}

/* Unsere Funktion zum Hook hinzufügen */
add_action( 'wpm_fb_fans_count', 'wpm_show_fb_fans', 10 );
?&gt;</code></pre>
<p>Jetzt können wir irgendwo in unserem Theme folgende Zeile einfügen und die Anzahl Facebook-Fans wird ausgegeben. Der Vorteil: Sollte man das Plugin mal deaktivieren, dann gibt es im Blog keine Fehlermeldung, zudem ist diese Lösung ressourcenschonend.</p>
<pre><code>&lt;?php do_action( 'wpm_fb_fans_count' ); ?&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/anzahl-facebook-fans-anzeigen-4363/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>How-To: Facebook IFrame Landing Page Anwendung erstellen</title>
		<link>http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/</link>
		<comments>http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 10:00:11 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=4279</guid>
		<description><![CDATA[Heute möchte ich euch zeigen, wie einfach man eine Facebook Landing Page mit PHP, HTML/CSS und Javascript erstellen kann. Wir mutieren zwar nicht zum Social Media Blog, diese Anleitung ist aber bestimmt sehr nützlich für einige von euch!]]></description>
			<content:encoded><![CDATA[<p>Heute möchte ich euch zeigen, wie einfach man eine Facebook Landing Page mit PHP, HTML/CSS und Javascript erstellen kann. Wir mutieren zwar nicht zum Social Media Blog, diese Anleitung ist aber bestimmt sehr nützlich für einige von euch!</p>
<h3>Hintergrund</h3>
<p>Doch was versteht man eigentlich unter einer Facebook Landing Page? Genau genommen meint man damit einen speziellen Reiter einer Fanseite, die neuen Besuchern angezeigt werden. Man kann aber auch spezielle Landing Pages für Aktionen oder Wettbewerbe nutzen.</p>
<p>Normalerweise hat eine Fanseite die Standard-Reiter Pinnwand, Fotos und  vielleicht noch Veranstaltungen. Weitere können durch Facebook Applikationen aus dem <a title="Facebook - Anwendungsverzeichnis" href="https://www.facebook.com/apps/directory.php">öffentlichen Verzeichnis</a> hinzugefügt werden. Besonders beliebt ist die Anwendung <em>Static FBML</em>, mit der man bis anhin sehr viele Landing Pages umgesetzt hat. Mit ihr kann man gewöhnliches HTML in Kombination mit speziellen Facebook-Tags für Landing Pages verwenden. In der Nutzung ist man aber sehr eingeschränkt, beispielsweise bei Javascript.</p>
<p>In einigen Tagen, genauer gesagt am 11. März, wird es nicht mehr möglich sein, Static FBML auf seiner Fanpage zu nutzen. Stattdessen sollen eigene Applikationen - in IFrames - genutzt werden. Diese haben viele Vorteile: Man kann nun problemlos Javascript und somit auch Google Analytics einsetzen, ist im Design nicht mehr beschränkt und kann seine Seiten noch besser in Facebook integrieren.</p>
<h3>Erste Schritte</h3>
<div id="attachment_4284" class="wp-caption alignright" style="width: 260px"><a rel="attachment wp-att-4284" href="http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/fb-new-app/"><img class="size-full wp-image-4284" title="Neue Facebook Anwendung erstellen" src="http://wp-magazin.ch/wp-content/uploads/fb-new-app.png" alt="Neue Facebook Anwendung erstellen" width="250" height="150" /></a><p class="wp-caption-text">Anwendung erstellen</p></div>
<p>Als Erstes muss man die <a title="Facebook - Entwickler" href="http://www.facebook.com/developers">Facebook Developer Applikation</a> installieren, danach kann man seine erste Anwendung erstellen. Als Erstes gibt man den Namen ein und akzeptiert die AGB von Facebook. Der Name darf übrigens nicht an eine Facebook-eigene Anwendung wie <em>Diskussionen </em>oder <em>Veranstaltungen </em>angelehnt sein.</p>
<p>Da der Name öffentlich ist, sollte man etwas Sinnvolles wählen, wie z.B. <em>WordPress Magazin</em> oder <em>dercooleblog.com</em>. Danach kommt man zur eigentlichen Einstellungs-Seite der Anwendung, wo es allerhand einzustellen gibt.</p>
<div id="attachment_4287" class="wp-caption aligncenter" style="width: 610px"><a rel="attachment wp-att-4287" href="http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/fb-app-info/"><img class="size-large wp-image-4287" title="Facebook Anwendung - Info" src="http://wp-magazin.ch/wp-content/uploads/fb-app-info-600x498.png" alt="Facebook Anwendung - Info" width="600" height="498" /></a><p class="wp-caption-text">Facebook Anwendungseinstellungen</p></div>
<p>Wichtig ist auf dieser ersten Einstellungsseite, dass man ein Logo (75x75px) sowie ein Icon (16x16px) hochlädt. Am besten eignen sich GIF-Bilder mit transparentem Hintergrund. Auch die Sprache schaltet man vorsichtshalber lieber auf Deutsch um, ich konnte allerdings beim Einrichten keinen Unterschied zu Englisch feststellen. Diese Einstellung dürfte wohl nur wichtig sein, wenn man seine Anwendung ins offizielle Verzeichnis stellen möchte. In unserem Fall bleibt die Anwendung jedoch privat.</p>
<p>Das nächste und letzte Register hat den Namen Facebook-Einbindung. Hier stellen wir ein, welche Seite im IFrame eingebunden werden soll. Zudem wird hier die Anwendungs-ID und der Anwendungs-Geheimcode angegeben, welche wir später für die Authentifizierung benötigen.</p>
<div id="attachment_4288" class="wp-caption aligncenter" style="width: 610px"><a rel="attachment wp-att-4288" href="http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/fb-app-canvas/"><img class="size-large wp-image-4288" title="Facebook Anwendung - Facebook-Einbindung" src="http://wp-magazin.ch/wp-content/uploads/fb-app-canvas-600x521.png" alt="Facebook Anwendung - Facebook-Einbindung" width="600" height="521" /></a><p class="wp-caption-text">Facebook-Einbindung</p></div>
<p>Ansonsten muss man folgendes anpassen:</p>
<ul>
<li><strong>Canvas-URL</strong> - Die URL zur Applikation auf dem eigenen Server, ohne jedoch eine explizite Datei anzugeben. Beispiel: http://example.com/wp-content/facebook/</li>
<li><strong>URL des Reiters</strong> - Hier kommt dann die Datei, meistens index.php</li>
<li><strong>Canvas-Typ / Reiter-Typ</strong> - IFrame</li>
<li><strong>Name des Reiters</strong> - Kurz und bündig, maximal 16 Zeichen</li>
</ul>
<p>Jetzt kann man die Änderungen speichern, wodurch man auf die Übersichtsseite gelangt. Dort klickt man auf die <em>Anwendungs-Profilseite</em> und anschliessend auf <em>Zu meiner Seite hinzufügen</em>. Im folgenden Menü wählt man dann die gewünschte Fanseite aus.</p>

<a href='http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/fb-app-uebersicht/' title='Facebook Anwendungsübersicht'><img width="150" height="150" src="http://wp-magazin.ch/wp-content/uploads/fb-app-uebersicht-150x150.png" class="attachment-thumbnail" alt="Facebook Anwendungsübersicht" title="Facebook Anwendungsübersicht" /></a>
<a href='http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/fb-app-hinzufuegen/' title='Facbook Applikation zur Seite hinzufügen'><img width="150" height="150" src="http://wp-magazin.ch/wp-content/uploads/fb-app-hinzufuegen-150x150.png" class="attachment-thumbnail" alt="Facbook Applikation zur Seite hinzufügen" title="Facbook Applikation zur Seite hinzufügen" /></a>

<p>Allerdings wird die Anwendung noch nicht standardmässig allen Nutzern angezeigt. Dazu muss man noch die entsprechende Fanseite bearbeiten und unter dem Punkt <em>Genehmigungen verwalten</em> den Standard-Reiter für Nicht-Fans definieren.</p>
<h3>Der Code</h3>
<p>Jetzt können wir uns nun der eigentlichen Applikation widmen. Dazu erstellt man im Programm seiner Wahl eine PHP Datei mit einfachem HTML-Grundgerüst - dazu reicht beispielsweise schon Dreamweaver. Als Nächstes bindet man das PHP-SDK, bestehend aus einer einzigen Datei, von Facebook ein, welches man <a title="GitHub - Facebook PHP-SDK" href="https://github.com/facebook/php-sdk">bei GitHub herunterladen</a> kann. Dort gibt es auch ein entsprechendes Beispiel zur Nutzung:</p>
<pre><code>&lt;?php
require './facebook.php';

$facebook = new Facebook(array(   'appId'  =-&gt; 'YOUR APP ID',
  'secret' =&gt; 'YOUR API SECRET',
  'cookie' =&gt; true, // enable optional cookie support
));

$session = $facebook-&gt;getSession();
$me = null;
if ($session) {
	try {
		$uid = $facebook-&gt;getUser();
		$me = $facebook-&gt;api('/me');
	} catch (FacebookApiException $e) {
		error_log($e);
	}
}
?&gt;
</code></pre>
<p>Damit initialisieren wir die Klasse und laden die aktuelle Session. So erhalten wir nämlich bereits einige Basics über den aktuellen Besucher, ob er eingeloggt ist oder nicht und ob er bereits Fan der Seite ist. Da wir jedoch weitere Features wie den Like-Button und die Möglichkeit, Freunde einzuladen, nutzen wollen, benötigen wir die Daten auch in Javascript. Dazu laden wir zusätzlich noch die <a title="Facebook-Entwickler - Javascript SDK" href="http://developers.facebook.com/docs/reference/javascript/">JS-SDK</a> direkt nach dem öffnenden <code>&lt;body&gt;</code>-Tag:</p>
<pre><code>&lt;div id="fb-root"&gt;&lt;/div&gt;
&lt;script&gt;
	(function() {
		var e = document.createElement('script');
		e.src = document.location.protocol + '//connect.facebook.net/de_DE/all.js';
		e.async = true;
		document.getElementById('fb-root').appendChild(e);
	}());
&lt;/script&gt;
</code></pre>
<p>Jetzt muss man - gleich im Anschluss - nur noch alle Javascript-Funktionen initialisieren, die Session-Daten haben wir dabei schon aus dem PHP-Teil.</p>
<pre><code>&lt;script&gt;
	window.fbAsyncInit = function() {
		FB.init({
			appId   : '&lt;?php echo $facebook-&gt;getAppId(); ?&gt;',
			session : &lt;?php echo json_encode($session); ?&gt;,
			status  : true,
			cookie  : true,
			xfbml   : true
		});
	}
&lt;/script&gt;</code></pre>
<p>Danach kommt das eigentliche Layout, wo man sich nach Lust und Laune austoben kann. Zum Beispiel kann die Landing Page an Facebook angelehnt oder so kunterbunt wie die Website sein. Einzige Limitierung ist die Breite von <strong>520 Pixel</strong>. Die Höhe sollte variabel sein, wie wir das vorhin in den Einstellungen definiert haben. Dazu bedarf es allerdings noch einer Zeile Code...</p>
<h4>Auto-Resize</h4>
<p>Wir haben in den Anwendungs-Einstellungen angegeben, dass die IFrame-Grösse automatisch angepasst werden soll, schliesslich will man ja keine Scrollbalken, welche das mit 520 Pixel schon schmale Layout je nach Browser nochmals um einige Pixel reduzieren würden. Zusätzlich zu dieser Einstellung muss man aber noch in der selben <code>window.fbAsyncInit</code> Funktion folgende Zeile einfügen:</p>
<pre><code>FB.Canvas.setAutoResize();</code></pre>
<p>Hat man allerdings ein jQuery-Slider oder -Accordion, so verändert sich ja immer die Grösse des IFrames. <code>FB.Canvas.setAutoResize()</code> ist deshalb nur für die Initialisierung des Tabs sinnvoll. Anschließende Vergrösserungen sollten besser manuell mit <code>FB.Canvas.setSize()</code> durchgeführt werden. Ein Beispiel:</p>
<pre><code>$('#xyz').click(function () {
	$('#xyzdiv').hide();
	var newHeight = $(document).height() + 170;
	FB.Canvas.setSize({ width: 520, height: newHeight });
	$('#newtext').slideDown(500, function () {
	});
});</code></pre>
<h4>Events</h4>
<p>Facebooks Javascript-SDK erlaubt es, sich in <a title="Facebook-Entwickler - FB.Event.subscribe" href="http://developers.facebook.com/docs/reference/javascript/fb.event.subscribe/">bestimmte Events</a> einzuklinken. Auf diesem Weg kann man die Applikation bei Login/Logout oder bei einem <em>Gefällt mir</em> neu laden. Mit Hilfe des GET-Parameters <code>app_data</code> kann man beim Reload bestimmte Werte an die Applikation übergeben, z.B. um eine Nachricht für den neuen Fan anzuzeigen.</p>
<p>Folgende Schnipsel kommen ebenfalls in die Init-Funktion:</p>
<pre><code>// Gewöhnlicher Reload nach Login, um Nutzer-Daten zu erhalten
FB.Event.subscribe('auth.login', function() {
	window.location.reload();
});

// Location anpassen, für Mitgabe von app_data Parameter
FB.Event.subscribe('edge.create', function (response) {
	setTimeout(function () {
		window.parent.location.href = 'http://www.facebook.com/meinefanpage&amp;sk=app_123456&amp;app_data=neuerfan';
	}, 1000);
});</code></pre>
<h4>Teilen</h4>
<p>Ein weiterer Vorteil einer eigenen Anwendung gegenüber Static FBML ist die Möglichkeit, dass man dem User Dialoge anzeigen kann. So lassen sich unter anderem Nachrichten an seine Pinnwand posten, wie dieses Beispiel zeigt:</p>
<pre><code>$('#share').click(function () {
	FB.ui({
		method: 'feed',
		name: 'Werde Fan von XY',
		message: 'Klicke Gefällt mir! Diese Nachricht kann man übrigens ändern!',
		caption: 'Die beste Seite',
		description: 'Werde Fan auf Facebook und unterstütze damit XY!',
		link: 'http://www.facebook.com/meinefanpage&amp;sk=app_123456',
		picture: 'http://example.com/wp-content/facebook/images/100x100px.png' // Auch ein Bild kann angezeigt werden, 100x100 Pixel
	});
});</code></pre>
<p>Hier kommt für den Element-Selektor <code>$('#share')</code> jQuery zum Einsatz. Dieser ganze Code-Block sollte am besten in einem <code>$(document).ready(function () { ... });</code> untergebracht werden, damit sichergestellt ist, dass die Facebook-SDK vollständig geladen ist. Am Ende sieht das dann ungefähr so aus:</p>
<div id="attachment_4307" class="wp-caption aligncenter" style="width: 604px"><a rel="attachment wp-att-4307" href="http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/fb-app-share/"><img class="size-full wp-image-4307" title="Facebook Landing Page - Teilen Dialog" src="http://wp-magazin.ch/wp-content/uploads/fb-app-share.png" alt="Facebook Landing Page - Teilen Dialog" width="594" height="270" /></a><p class="wp-caption-text">Der Teilen Dialog</p></div>
<h3>Fazit</h3>
<p>Schlussendlich könnte die Landing Page so aussehen wie die des WordPress Magazins, auch wenn unsere noch etwas minimalistisch daherkommt. An dieser Stelle seid ihr gefragt! Erstellt eure eigene Landing Page anhand dieses Beispiels und liest weiterführende Dokumentationen von Facebook:</p>
<ul>
<li><a title="Facebook-Entwickler - Authentication" rel="nofollow" href="http://developers.facebook.com/docs/authentication">Signed Request</a></li>
<li><a title="Facebook-Entwickler - Social Plugins" rel="nofollow" href="http://developers.facebook.com/docs/plugins/">Social Plugins</a> (Gefällt mir Buttons, etc.)</li>
<li><a title="Facebook-Entwickler - Graph API" rel="nofollow" href="http://developers.facebook.com/docs/reference/api/">Graph API</a></li>
<li><a title="Facebook-Entwickler - Javascript SDK" rel="nofollow" href="http://developers.facebook.com/docs/reference/javascript/">Javascript SDK Übersicht</a></li>
<li><a title="Facebook-Entwickler - OAuth Dialog" rel="nofollow" href="http://developers.facebook.com/docs/reference/dialogs/oauth/">Facebook OAuth Implementierung</a></li>
</ul>
<div id="attachment_4308" class="wp-caption aligncenter" style="width: 610px"><a rel="attachment wp-att-4308" href="http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/fb-app-result/"><img class="size-large wp-image-4308" title="Die fertige Facebook Landing Page" src="http://wp-magazin.ch/wp-content/uploads/fb-app-result-600x426.png" alt="Die fertige Facebook Landing Page" width="600" height="426" /></a><p class="wp-caption-text">Das Endergebnis</p></div>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/facebook-iframe-landing-page-anwendung-4279/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>How-To: Autoren-Box am Ende eines Beitrags anzeigen</title>
		<link>http://wp-magazin.ch/blog/how-to-autoren-box-am-ende-eines-beitrags-3677/</link>
		<comments>http://wp-magazin.ch/blog/how-to-autoren-box-am-ende-eines-beitrags-3677/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 07:00:53 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Themes]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=3677</guid>
		<description><![CDATA[In diesem Beitrag möchten wir euch zeigen, wie ihr eine kleine Autoren-Box am Ende jedes Blog-Beitrags anzeigen lassen könnt. Wir werden hier weitgehend den Code vorstellen, den wir auch hier im Blog benutzen, erweitern diesen aber noch zusätzlich, dass wir auch die Kontaktinformationen eines jeden Autors ausgeben können.]]></description>
			<content:encoded><![CDATA[<p>In diesem Beitrag möchten wir euch zeigen, wie ihr eine kleine Autoren-Box am Ende jedes Blog-Beitrags anzeigen lassen könnt. Wir werden hier weitgehend den Code vorstellen, den wir auch hier im Blog benutzen, erweitern diesen aber noch zusätzlich, dass wir auch die Kontaktinformationen eines jeden Autors ausgeben können.</p>
<h3>Das Grundgerüst</h3>
<p>Zuerst öffnen wir die <code>single.php</code> Datei unseres aktuellen Themes und suchen die Schleife (Loop), wo der jeweilige Beitrag ausgegeben wird und erstellen vor dem &lt;?php endwhile; ?&gt; einen Div-Container. Dies sieht dann in etwa so aus:</p>
<pre><code>&lt;?php if (have_posts()) : while (have_posts()) : the_post();?&gt;
&lt;div id="post-&lt;?php the_ID(); ?&gt;" &lt;?php post_class() ?&gt;&gt;
&lt;h2&gt;&lt;a href="&lt;?php the_permalink(); ?&gt;" title="&lt;?php the_title(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;?php the_content(); ?&gt;
&lt;/div&gt;
<span class="highlight">&lt;div id="post-author"&gt;
&lt;/div&gt;</span>
&lt;?php endwhile; ?&gt;</code></pre>
<p>Für die Ausgabe der verschiedenen Informationen über den Beitrags-Autoren gibt es viele Funktionen in WordPress. Mit der Funktion <a title="WordPress Codex - get_avatar" href="http://codex.wordpress.org/Function_Reference/get_avatar">get_avatar()</a> können wir zum Beispiel das <a title="Gravatar.com" href="http://gravatar.com/">Gravatar </a>des Autors anzeigen lassen, mit <a title="WordPress Codex - the_author" href="http://codex.wordpress.org/Function_Reference/the_author">the_author()</a> seinen öffentlichen Namen und mit <a title="WordPress Codex - the_author_meta" href="http://codex.wordpress.org/Function_Reference/the_author_meta">the_author_meta()</a> alle weiteren Benutzerinformationen wie E-Mail Adresse oder Website. Das sieht dann ungefähr so aus:</p>
<pre><code>&lt;div id="post-author"&gt;
&lt;?php echo get_avatar(get_the_author_meta('user_email'), $size = 50, $default = '', $alt = 'Dies ist nur ein Gravatar'); ?&gt;
&lt;strong&gt;&lt;?php the_author(); ?&gt;&lt;/strong&gt;
&lt;p&gt;&lt;?php the_author_meta('description'); ?&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Website: &lt;?php the_author_meta('user_url'); ?&gt;&lt;/li&gt;
&lt;li&gt;AIM: &lt;?php the_author_meta('aim'); ?&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</code></pre>
<h3>
<p><div id="attachment_3694" class="wp-caption aligncenter" style="width: 610px"><a href="http://wp-magazin.ch/wp-content/uploads/how-to-autoren-box.jpg"><img class="size-large wp-image-3694" title="Das Grundgerüst" src="http://wp-magazin.ch/wp-content/uploads/how-to-autoren-box-600x220.jpg" alt="Das Grundgerüst" width="600" height="220" /></a><p class="wp-caption-text">Das Grundgerüst</p></div></h3>
<h3>Gestaltung</h3>
<p>Leider sieht es noch ganz und gar nicht nach einer Box aus, weswegen wir noch ein paar CSS-technische Handgriffe anwenden müssen. Dazu schreiben wir folgende, simple Zeilen, die unsere Autoren-Box gleich etwas verschönern, in die <code>style.css</code> Datei des Themes.</p>
<pre><code>#post-author {
	display:block;
	background:#efefef;
	border:1px solid #ccc;
	padding:5px;
	margin-top:25px;
}

#post-author img.avatar {
	float:left;
	margin:0 10px 5px 0;
	padding:3px;
	border:1px solid #ccc;
}

#post-author ul li {
	display:inline;
	margin-right:20px;
}</code></pre>
<div id="attachment_3695" class="wp-caption aligncenter" style="width: 610px"><a href="http://wp-magazin.ch/wp-content/uploads/how-to-autoren-box-css.jpg"><img class="size-large wp-image-3695" title="Die Autoren-Box mit CSS" src="http://wp-magazin.ch/wp-content/uploads/how-to-autoren-box-css-600x194.jpg" alt="Die Autoren-Box mit CSS" width="600" height="194" /></a><p class="wp-caption-text">Die Autoren-Box mit CSS</p></div>
<h3>Twitternamen anzeigen</h3>
<p>Wenn die Autoren eines Blogs auch auf Twitter anzutreffen sind, dann wäre es doch klasse, wenn man auch den Twitternamen anzeigen könnte. Dafür müssen wir uns durch einen eigenen Filter eine zusätzliche Kontaktmethode zu den Benutzerprofilen hinzufügen:</p>
<pre><code>function wpm_add_twitter_contactmethod( $contactmethods ) {
 // Twitter hinzufügen
 $contactmethods['twitter'] = 'Twitter';
 return $contactmethods;
}
add_filter('user_contactmethods','wpm_add_twitter_contactmethod',10,1);</code></pre>
<p>Dadurch können wir jetzt unseren Twitternamen in den Profileinstellungen erfassen und ihn dann in unserer Autoren-Box ausgeben.<br />

<a href='http://wp-magazin.ch/blog/how-to-autoren-box-am-ende-eines-beitrags-3677/how-to-autoren-box-twitter/' title='Autoren-Box mit Twitternamen'><img width="150" height="150" src="http://wp-magazin.ch/wp-content/uploads/how-to-autoren-box-twitter-150x150.jpg" class="attachment-thumbnail" alt="Autoren-Box mit Twitternamen" title="Autoren-Box mit Twitternamen" /></a>
<a href='http://wp-magazin.ch/blog/how-to-autoren-box-am-ende-eines-beitrags-3677/how-to-twitter-contactmethod/' title='Twitternamen erfassen'><img width="150" height="150" src="http://wp-magazin.ch/wp-content/uploads/how-to-twitter-contactmethod-150x150.jpg" class="attachment-thumbnail" alt="Twitternamen erfassen" title="Twitternamen erfassen" /></a>
</p>
<h3>Weitere Möglichkeiten</h3>
<p>Die Autoren-Box könnte man noch etwas perfektionieren, indem man die Existenz der Funktionen überprüft und notfalls auf veraltete, in früheren WordPress-Versionen verwendete Funktionen zurückgreift. Ausserdem könnte man die Website oder den Twitternamen noch verlinken, aber das dürfte kein Problem sein.</p>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/how-to-autoren-box-am-ende-eines-beitrags-3677/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Rezension: WordPress &#8211; Das Einsteigerseminar (2. Auflage)</title>
		<link>http://wp-magazin.ch/blog/rezension-wordpress-das-einsteigerseminar-2-auflage-3117/</link>
		<comments>http://wp-magazin.ch/blog/rezension-wordpress-das-einsteigerseminar-2-auflage-3117/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 11:40:02 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Buch]]></category>
		<category><![CDATA[Rezension]]></category>
		<category><![CDATA[Vladimir Simovic]]></category>
		<category><![CDATA[Wettbewerb]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=3117</guid>
		<description><![CDATA["WordPress - Das Einsteigerseminar" von Vladimir Simovic und Thordis Bonfranchi-SImovic richtet sich, wie der Name schon verrät, an Neulinge, welche sich in WordPress einarbeiten wollen. Das wird einem spätestens dann klar, wenn man das Inhaltsverzeichnis aufschlägt: Das Buch wird aufgeteilt in die drei Abschnitte Lernen — Üben — Anwenden.]]></description>
			<content:encoded><![CDATA[<div id="attachment_3120" class="wp-caption alignleft" style="width: 213px"><a href="http://wp-magazin.ch/wp-content/uploads/wordpress-einsteigerseminar.jpg"><img class="size-medium wp-image-3120 " title="WordPress - Das Einsteigerseminar" src="http://wp-magazin.ch/wp-content/uploads/wordpress-einsteigerseminar-203x300.jpg" alt="WordPress - Das Einsteigerseminar" width="203" height="300" /></a><p class="wp-caption-text">WordPress - Das Einsteigerseminar</p></div>
<p>"<em>WordPress - Das Einsteigerseminar</em>" von <a title="Peruns Weblog - Webwork, WordPress und Internet" href="http://perun.net/">Vladimir Simovic und Thordis Bonfranchi-Simovic</a> richtet sich, wie der Name schon verrät, an Neulinge, welche sich in WordPress einarbeiten wollen. Das wird einem spätestens dann klar, wenn man das Inhaltsverzeichnis aufschlägt: Das Buch wird aufgeteilt in die <strong>drei Abschnitte</strong> <em>Lernen</em> — <em>Üben</em> — <em>Anwenden</em>. In diesem Beitrag möchte ich das Buch kurz vorstellen und <strong>meine Meinung</strong> dazu schreiben. Zum Schluss gibt es sogar noch einen <strong>Wettbewerb</strong>!</p>
<p>Übrigens: Gerade als ich dabei war, diesen Artikel hier zu schreiben,  las ich unter <a title="3. Auflage von WordPress – Das Praxisbuch -  WordPress-Buch" href="http://www.wordpress-buch.de/2010/03/3-auflage-von-wordpress-das-praxisbuch/">www.wordpress-buch.de</a>,  dass ihr anderes Buch "<em>WordPress - Das Praxisbuch</em>" bereits in  der 3. Auflage erschienen ist. Herzliche Gratulation!</p>
<h3>Lernen</h3>
<p>Im 1. Teil lernt der Leser grundlegende Informationen zu Weblogs, wo man sie einsetzt, wie man sie erkennt und sie selbst betreibt. Damit kommen die beiden Autoren auch gleich zum nächsten Kapitel, in dem WordPress erklärt wird. Dabei geht man <strong>Schritt für Schrit</strong>t die einzelnen Seiten im Adminbereich durch und lernt, welche Seite wo für was zuständig ist. Diese werden im Buch übrigens mit <em>Modul</em> bezeichnet, was eigentlich kein gängiger Name dafür ist.</p>
<p>Im Schlussteil kommt man bereits zu den für Einsteiger etwas kniffligeren Dingen, wie z.B. YouTube-Videos einbinden, Backups und Updates. Ausserdem werden interessante Dienste wie <a title="twitterfeed" href="http://twitterfeed.com/">twitterfeed</a> und <a title="Rivva" href="http://rivva.de/">Rivva </a>kurz vorgestellt.</p>
<h3>Üben</h3>
<p>In diesem Teil gibt es verschiedene Übungen zu den Kapiteln im Teil <strong>Lernen</strong>, wobei jedes Übungskapitel aus rund 10 Fragen besteht, die von "<em>Was ist das «Dashboard»</em>" bis hin zu "<em>Welche Vorteile bietet die Exportfunktion</em>" reichen. Aus Sicht eines Einsteigers mag dieses <strong>Frage-Antwort-Spiel</strong> noch interessant sein, ich kann es mir aber nicht so recht vorstellen, es ist ja eigentlich alles nur <strong>Repetition</strong>...</p>
<h3>Anwenden</h3>
<div id="attachment_3122" class="wp-caption alignright" style="width: 160px"><a href="http://wp-magazin.ch/wp-content/uploads/vlad-design-de.jpg"><img class="size-thumbnail wp-image-3122 " title="vlad-design.de" src="http://wp-magazin.ch/wp-content/uploads/vlad-design-de-150x150.jpg" alt="vlad-design.de" width="150" height="150" /></a><p class="wp-caption-text">vlad-design.de</p></div>
<p>Vladimir a.k.a. Perun beschreibt in diesem Teil anhand seiner eigenen Website <strong>das klassische Beispiel</strong> einer WordPress-Installation als CMS, was meiner Meinung nach für Einsteiger <strong>sehr praktisch</strong> ist! Danach fährt er fort mit weiterführenden Links zu Blogs wie <a title="bueltge.de - Frank Bültge" href="http://bueltge.de">bueltge.de</a> und <a title="wpengineer.com - WP Engineer" href="http://wpengineer.com/">wpengineer.com</a> - leider ist dieser Blog noch nicht dabei ;-). Nützlich finde ich die Tabelle, welche die Stufen der verschiedenen Benutzerrollen in WordPress darstellt. Denn wenn man diese Information braucht, hatte man dies bisher meist nicht gleich zur Hand. Zu guter Letzt folgt dann noch ein mehrseitiges Glossar sowie ein Index. Auch wenn dieser Teil etwas mager wirkt, ist er für Einsteiger, an die sich dieses Buch ja schliesslich richtet, bestimmt <strong>sehr interessant</strong>.</p>
<h3>Fazit</h3>
<p>Dieses Buch kann ich all jenen <strong>wärmstens empfehlen</strong>, die sich zum ersten Mal in die Welt der Blogs verirren oder von einem anderen CMS wechseln wollen und eine geeignete Starthilfe benötigen. Es bietet einen <strong>guten Einstieg</strong> und auf der <a title="wordpress-buch.de - WordPress-Buch" href="http://www.wordpress-buch.de/">Website zum Buch</a> findet der Leser sogar noch neueste News zur Web Publishing Plattform.</p>
<h3>Wettbewerb</h3>
<p>Freundlicherweise stellt mir der Verleg <a title="bhv.net - bhv" href="http://www.bhv.net/">bhv</a>, bei welchem das Buch erschienen ist, ein kostenloses <strong>Exemplar</strong> im Wert von rund 15 Euro zur Verfügung, welches ich gerne unter den Lesern des Schweizer WordPress Magazins <strong>verlosen</strong> möchte. Um an der Verlosung teilzunehmen, müsst ihr bloss bis spätestens 7. April 2010 einen <strong>Kommentar</strong> zu diesem Beitrag schreiben. Das Buch wird unter allen teilnehmenden Leserinnen und Lesern verlost. Bitte gebt dabei eine gültige E-Mail Adresse an, da ich euch im Gewinnfall ja irgendwie kontaktieren muss :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/rezension-wordpress-das-einsteigerseminar-2-auflage-3117/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Kommentar-Template verändern ab WordPress 2.7</title>
		<link>http://wp-magazin.ch/blog/kommentar-template-veraendern-ab-wordpress-27-2586/</link>
		<comments>http://wp-magazin.ch/blog/kommentar-template-veraendern-ab-wordpress-27-2586/#comments</comments>
		<pubDate>Thu, 07 May 2009 16:02:49 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Kommentare]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Template Tags]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=2586</guid>
		<description><![CDATA[Ziel dieses Beitrags ist es, die Ausgabe der Kommentare ab WordPress 2.7 manuell zu verändern, weil die WordPress-eigene Darstellung nicht für jedes Design und jeden Blog geeignet ist.]]></description>
			<content:encoded><![CDATA[<p>Mein letztes kleines Projekt war die Anpassung eines WordPress Themes an WordPress 2.7, wo meistens die verschachtelten Kommentare eine Hauptrolle spielen. Weil man nämlich dafür im Kommentar-Template einiges umstellen muss, erkläre ich euch am besten mal, wie das geht. Ziel dieses Beitrags ist es, die Ausgabe der Kommentare ab WordPress 2.7 manuell zu verändern, weil die WordPress-eigene Darstellung nicht für jedes Design und jeden Blog geeignet ist.</p>
<p>Früher sah das Kommentar-Template so aus:</p>
<pre><code>&lt;?php if ($comments) : ?&gt;
	&lt;h2&gt;&lt;?php comments_number('0 Kommentare', '1 Kommentare', '% Kommentare' ); ?&gt;&lt;/h2&gt;
	&lt;ul&gt;
	&lt;?php foreach ($comments as $comment) : ?&gt;
	&lt;li id="comment-&lt;?php echo $commentcount ?&gt;"&gt;

	&lt;?php comment_author_link(); ?&gt;
	?&gt; am &lt;?php comment_date('j. F Y') ?&gt; um &lt;?php comment_time() ?&gt;&lt;/p&gt;
	&lt;?php if ($comment-&gt;comment_approved == '0') : ?&gt;
	Dein Kommentar muss noch gepr&uuml;ft werden.&lt;?php endif; ?&gt;
	&lt;?php comment_text() ?&gt;
	&lt;?php edit_comment_link('Kommentar bearbeiten'); ?&gt;
	&lt;/li&gt;
&lt;?php $commentcount++; endforeach; /* end for each comment */ ?&gt;
&lt;/ul&gt;

&lt;?php endif; ?&gt;</code></pre>
<p>Heute ist es ganz anders. Nichts mehr mit lästigen Variablen un eher zweckmässigen Funktionen. Ab WordPress 2.7 hat das Kommentar-Template de facto den gleichen Stand wie die Beiträge, da es jetzt eine eigene Loop ist. Eine Loop für Kommentare eben. Im Vergleich zu vorher ist das neue Template auch ein wenig schlanker geworden. Der Kern ist der hervorgehobene Template Tag <code>&lt;?php wp_list_comments(); ?&gt;</code></p>
<pre><code>&lt;?php if ( have_comments() ) : ?&gt;
	&lt;h3&gt;&lt;?php comments_number('0 Kommentare', '1 Kommentar', '% Kommentare' );?&gt;&lt;/h3&gt;
	&lt;ul class="commentlist"&gt;
		&lt;?php wp_list_comments('type=comment&#038;callback=magazin_comment'); ?&gt;
	&lt;/ul&gt;

	&lt;div class="navigation"&gt;
		&lt;div class="alignleft"&gt;&lt;?php previous_comments_link() ?&gt;&lt;/div&gt;
		&lt;div class="alignright"&gt;&lt;?php next_comments_link() ?&gt;&lt;/div&gt;
	&lt;/div&gt;
 &lt;?php else : // Falls es noch keine Kommentare zum Beitrag gibt ?&gt;
	&lt;?php if ('open' == $post-&gt;comment_status) : ?&gt;
	 &lt;?php else : // comments are closed ?&gt;
		&lt;p&gt;Kommentare sind geschlossen.&lt;/p&gt;
&lt;?php endif; endif; ?&gt;</code></pre>
<p>Jetzt haben wir also schon eine vernünftige Basis, die aber noch einiges an Erklärungen bedarf! Die ersten Zeilen dürften klar sein, da die Funktionen doch recht aussagekräftige Namen haben. Der Container mit den zwei Template Tags <code>&lt;?php previous_comments_link() ?&gt;</code> und <code>&lt;?php next_comments_link() ?&gt;</code> sorgt übrigens für die Navigation, falls die Kommentare auf mehrere Seiten verteilt sind. Dies kann man aber in den WordPress Einstellungen deaktivieren, was dann diesen Code-Teil überflüssig macht.</p>
<p>Habt ihr gesehen, dass ab WordPress 2.7 die Angaben über Kommentierer und Datum nicht mehr direkt im Template stehen? Für diese hat WordPress nämlich schon eine Vorlage. Wer diese Vorlage ändern will, braucht dazu nur <code>&lt;?php wp_list_comments(); ?&gt;</code> zu erweitern! Und zwar um den Parameter <code>'callback=myown_comments'</code>. Folglich sieht diese Zeile nun so aus: <code>&lt;?php wp_list_comments('callback=myown_comments'); ?&gt;</code>.</p>
<p>Jetzt muss man nur noch folgende Zeilen in der <code>functions.php</code> des Themes einfügen und schon kann man die Ausgabe nach Belieben verändern!</p>
<pre><code>&lt;?php function myown_comments($comment, $args, $depth) {
   $GLOBALS['comment'] = $comment; ?&gt;
   &lt;li &lt;?php comment_class(); ?&gt; id="li-comment-&lt;?php comment_ID() ?&gt;"&gt;
     &lt;div id="comment-&lt;?php comment_ID(); ?&gt;"&gt;
      &lt;div class="comment-author vcard"&gt;
         &lt;?php echo get_avatar($comment,$size='48',$default='&lt;path_to_url&gt;' ); ?&gt;

         &lt;?php printf(__('%s says:'), get_comment_author_link()) ?&gt;
      &lt;/div&gt;
		&lt;?php if ($comment-&gt;comment_approved == '0') : ?&gt;
	&lt;em&gt;&lt;?php _e('Your comment is awaiting moderation.') ?&gt;&lt;/em&gt;
	&lt;br /&gt;
	&lt;?php endif; ?&gt;

	&lt;div class="comment-meta commentmetadata"&gt;
	&lt;a href="&lt;?php echo htmlspecialchars(
	get_comment_link( $comment-&gt;comment_ID ) ) ?&gt;"&gt;
	&lt;?php printf(__('%1$s at %2$s'), get_comment_date(),  get_comment_time()) ?&gt;&lt;/a&gt;
	&lt;?php edit_comment_link(__('(Edit)'),'  ','') ?&gt;&lt;/div&gt;

		&lt;?php comment_text() ?&gt;

		&lt;div class="reply"&gt;
		&lt;?php comment_reply_link(array_merge(
		$args, array('depth' =&gt; $depth, 'max_depth' =&gt; $args['max_depth'])
		)) ?&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;?php } ?&gt;
</code></pre>
<p><strong>Hinweis</strong>: Am Ende fehlt ein schliessendes <code>&lt;/li&gt;</code>, dieses fügt WordPress automatisch ein, wenn es Child-Kommentare gibt!</p>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/kommentar-template-veraendern-ab-wordpress-27-2586/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Memberseiten in WordPress</title>
		<link>http://wp-magazin.ch/blog/memberseiten-in-wordpress-1918/</link>
		<comments>http://wp-magazin.ch/blog/memberseiten-in-wordpress-1918/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 12:49:19 +0000</pubDate>
		<dc:creator>Claudio Schwarz</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Template Tags]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=1918</guid>
		<description><![CDATA[Für einen Schweizer Partyverein stand ich vor der delikaten Aufgabe ein WordPress Theme zu entwickeln. Die Knacknuss: Alle Vorstandsmitglieder und Staffs sollten im WordPress Backend via Registrierung erfasst und danach im Frontend angezeigt werden.]]></description>
			<content:encoded><![CDATA[<p>Für einen Schweizer Partyverein stand ich vor der delikaten Aufgabe ein WordPress Theme zu entwickeln. Die Knacknuss: Alle Vorstandsmitglieder und Staffs sollten im WordPress Backend via Registrierung erfasst und danach im Frontend angezeigt werden.</p>
<h2>Die Lösung</h2>
<p>Ich habe mir ein eigenes <code>author.php</code> File zusammengeschustert. Um aber mehrere registrierte User anzeigen zu können, reichen die <a title="WordPress Codex - Template Tags" href="http://codex.wordpress.org/Template_Tags/the_author">normalen Tags</a> nicht mehr aus. Dafür wird die Variable <code>$curauth</code> (Current Author) benötigt.</p>
<p>Allerdings muss vor der Abfrage aller Daten zum Member dieser Codeschnipsel eingefügt werden:</p>
<pre><code>&lt;?php
if(isset($_GET['author_name'])) :
$curauth = $get_userdatabylogin($author_name);
else :
$curauth = $get_userdata(intval($author));
endif;
?&gt;</code></pre>
<p>Danach können die ersten Tags eingefügt werden.</p>
<pre><code>&lt;h2&gt;&lt;?php echo $curauth-&gt;first_name . ' ' . $curauth-&gt;last_name; ?&gt;
&lt;img src="&lt;?php bloginfo('stylesheet_directory'); ?&gt;/images/authors/
&lt;php echo $curauth-&gt;last_name; ?&gt;.jpg" alt="&lt;?php echo $curauth-&gt;nickname ?&gt;"
class="author &lt;?php echo $curauth-&gt;nickname ?&gt; /&gt;</code></pre>
<p>Raffiniert dabei: Man erstellt sich im Template Ordner unter /images einen weiteren Ordner den man "authors" nennt. Danach lädt man dort die Userbilder benannt nach dem Nachnamen des Users hoch, in meinem Fall würde das Bild "schwarz.jpg" heissen. Mit ein bisschen CSS lässt sich dann das Ergebnis getrost anschauen:</p>
<div id="attachment_1970" class="wp-caption aligncenter" style="width: 310px"><a href="http://wp-magazin.ch/wp-content/uploads/claudio-member.jpg"><img class="size-medium wp-image-1970" title="Claudio Schwarz" src="http://wp-magazin.ch/wp-content/uploads/claudio-member-300x166.jpg" alt="Claudio Schwarz" width="300" height="166" /></a><p class="wp-caption-text">Claudio Schwarz</p></div>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/memberseiten-in-wordpress-1918/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Eigene Themes für MailPress</title>
		<link>http://wp-magazin.ch/blog/eigene-mailpress-themes-1919/</link>
		<comments>http://wp-magazin.ch/blog/eigene-mailpress-themes-1919/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 14:33:42 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[E-Mail]]></category>
		<category><![CDATA[MailPress]]></category>
		<category><![CDATA[Newsletter]]></category>
		<category><![CDATA[Themes]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=1919</guid>
		<description><![CDATA[Wir benutzen für den Newsletter des Schweizer WordPress Magazins das kostenlose MailPress Plugin. Für dieses Newsletter System kann man mit ein wenig Grundwissen in Sachen Webdesign tolle Designs erstellen. Hier die Basics zu MailPress Themes.]]></description>
			<content:encoded><![CDATA[<p>Wie ihr wisst, bietet das Schweizer WordPress Magazin seit einiger Zeit einen eigenen Newsletter an, wo ihr als Besucher in unregelmässigen Abständen das Neuste zu WordPress erfährt. Wollt ihr also tolle Linktipps, empfehle ich euch den Newsletter zu abonnieren, das Anmeldeformular findet ihr in der Sidebar!</p>
<p>Für Newsletter aller Art gibt es ja viele bekannte Dienste, doch ich habe mich dazu entschlossen, ein WordPress Plugin dafür zu verwenden. Auch wenn <a title="WordPress Plugins - MailPress" href="http://www.mailpress.org/">MailPress</a> nicht perfekt ist und ich es manchmal am liebsten zum Teufel jagen würde, erfüllt es seinen Zweck. Dabei sei erwähnt, dass MailPress vom Aufbau her wie ein Blog-im-Blog funktioniert, da es praktisch genau gleich aufgebaut ist wie WordPress. So ist es sehr mächtig und lässt sich auch durch weitere Plugins erweitern. Das ist natürlich super, aber auch ein wenig kompliziert.</p>
<h3>MailPress Themes</h3>
<p>Was ich aber nicht missen möchte, ist die einfache Möglichkeit, das Aussehen des Newsletters mit Themes zu verändern. Auch hier fällt wieder die Ordnerstruktur auf: Alle Themes müssen im Ordner <em>wp-content/plugins/mailpress/mp-content/themes/</em> gespeichert werden - das "mp" steht dabei für MailPress. Standardmässig sind 5 Themes vorhanden, darunter auch eines, welches die im Header die Website von <a title="WordPress" href="http://wordpress.org/">WordPress.org</a> nachahmt, allerdings stimmt die Farbgebung nicht so ganz...</p>
<p>Jedes Theme braucht eine Datei <code>style.css</code>, wo der Name des Themes hinterlegt ist. Dazu noch ein Screenshot für die Anzeige im MailPress Dashboard und eine <code>index.php</code>, auch wenn sie leer sein sollte.</p>
<p>Weitere Theme-Dateien:</p>
<ul>
<li><strong>header.php</strong> - Kopfzeile des Newsletters. Wird aufgerufen mit <code>&lt;?php $this-&gt;get_header() ?&gt;</code></li>
<li><strong>footer.php</strong> - Einbinden kann man den Footer mit <code>&lt;?php $this-&gt;get_footer() ?&gt;</code></li>
<li><strong>sidebar.php</strong> - Sogar eine Sidebar gibt es. Nur kann man keine Widgets verwenden! Funktion: <code>&lt;?php $this-&gt;get_sidebar() ?&gt;</code></li>
<li><strong>functions.php</strong> - Wie bei einem WordPress Theme lassen sich bestimmte Funktionen in einer seperaten Datei ausführen.</li>
</ul>
<p>Alles in allem eine gelungene Sache. Bis hier hin wird also kaum jemand, der im Newsletter das gleiche Design wie im Blog benutzen möchte, Mühe haben, dies zu realisieren.</p>
<h4>Mail Templates</h4>
<p>Interessant wird es aber erst, wenn wir die verschiedenen Mail Templates genauer unter die Lupe nehmen. Wenn du irgendwo E-Mail Dienst abonnierst, wirst du immer eine Bestätigungsnachricht erhalten. Auch wenn du dich wieder abmeldest, erhältst du wieder eine automatische Abschiedsmail. Und irgendwie muss dies auch <a title="WordPress Plugins - MailPress" href="http://www.mailpress.org/">MailPress</a> so machen.</p>
<p>Bislang gibt es folgende Templates:</p>
<ul>
<li><strong>new_subscriber.php</strong> - Wenn jemand den Newsletter gerade abonniert hat, bekommt er die Nachricht, die hier drin steht.</li>
<li><strong>confirmed.php</strong> - Nach der Bestätigung des Abonnements.</li>
<li><strong>single.php</strong> - Immer, wenn ein neuer Beitrag erscheint, wird diese Mail gesendet. Ist natürlich optional!</li>
<li><strong>daily/weekly/monthly.php</strong> - Für Mails, die alle Beiträge des Tages, der Woche oder des Monats auflisten.</li>
<li><strong>comments.php</strong> - Falls man die neuen Kommentare zu einem Beitrag per E-Mail abonniert hat.</li>
</ul>
<p>Falls man in den Einstellungen "MailPress version of wp_mail" aktiviert hat, kann man ebenfalls diese Templates verwenden:</p>
<ul>
<li><strong>moderate.php</strong> - Informiert den Autor über neue Kommentare und Trackbacks zu seinem Beitrag.</li>
<li><strong>new_user.php</strong> - Sagt dem Admin, wenn sich jemand im Blog registriert hat.</li>
</ul>
<p>Wie man unschwer erkennen kann, würde MailPress dabei die Funktionen von WordPress ersetzen, damit auch alles in einem schönen Corporate Design dargestellt werden kann.</p>
<h3>MailPress API</h3>
<p>MailPress wäre nicht MailPress, hätte es nicht eine <a title="MailPress API" href="http://andrerenaut.ovh.org/wp/?page_id=70#fragment-7">Schnittstelle</a>, um Plugin-Entwicklern und Designern die Arbeit zu erleichtern. Objektorientiertes Programmieren ist dabei das Stichwort. Ob man die Werte von verschiedenen Einstellungen oder die Inhalte von Benutzerprofilen darstellen möchte, man findet immer einen Weg.</p>
<h3>Ein eigenes MailPress Theme erstellen</h3>
<p>Falls man in der Vergangenheit schon mal mit Newslettern zu tun hatte, weiss man, dass die gängigsten E-Mail Dienste in punkte HTML, CSS und Javascript rund 10 Jahre zurückliegen. Solltest du also dein WordPress Theme in ein MailPress Theme konvertieren, musst du alles vergessen, was du je über modernes Webdesign gehört hast.</p>
<p>Damit ein Newsletter in Outlook, GMail, GMX und auch sonst wo immer gleich aussieht, muss man sicherheitshalber auf Tabellen-Layouts zurückgreifen. Externe Stylesheets sind sowieso ein absolutes Tabu, höchstens Inline-Styles werden noch manchmal geduldet. Javascript geht auch rein sicherheitstechnisch nicht. Und bevor man jetzt noch stutzig wird: Ein MailPress Theme braucht zwar eine <code>style.css</code>, aber dort darf ausser dem Namen auch gar nichts drin stehen.</p>
<p>Der Plugin Autor und auch ich empfehlen euch folgende Quellen, damit eure Newsletter Designs auch garantiert gut aussehen:</p>
<ul>
<li><a title="Email Standars Projekt" href="http://www.email-standards.org/">Email Standards Projekt</a></li>
<li><a title="CSSTidy" href="http://floele.flyspray.org/csstidy//css_optimiser.php?lang=de">CSSTidy</a></li>
<li><a title="How to Code HTML Email Newsletters" href="http://www.sitepoint.com/article/code-html-email-newsletters">How to Code HTML Email Newsletters</a></li>
<li><a title="How to Test HTML emails" href="http://www.campaignmonitor.com/blog/archives/2006/12/how_to_test_html_emails.html">How to Test HTML emails</a></li>
<li><a title="A Guide to CSS Support in Email - 2007 Edition" href="http://www.campaignmonitor.com/blog/archives/2007/04/a_guide_to_css_support_in_emai_2.html">A Guide to CSS Support in Email - 2007 Edition</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/eigene-mailpress-themes-1919/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Beiträge von Typo3 in WordPress importieren</title>
		<link>http://wp-magazin.ch/blog/beitraege-von-typo3-in-wordpress-importieren-1860/</link>
		<comments>http://wp-magazin.ch/blog/beitraege-von-typo3-in-wordpress-importieren-1860/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 15:46:04 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Export]]></category>
		<category><![CDATA[Import]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=1860</guid>
		<description><![CDATA[Typo3 ist schon doppelt so lange auf dem Markt wie WordPress und viele Programmierer schwören darauf, so wie ich das mit WordPress mache. Doch für den Datenaustausch zwischen den zwei Content Management Systemen wurde bisher wenig getan. Zwar gibt es gleich zwei Extensions um Artikel von WordPress in das mächtige Typo3 zu importieren, umgekehrt aber nicht - bis jetzt....]]></description>
			<content:encoded><![CDATA[<div id="attachment_1871" class="wp-caption alignright" style="width: 260px"><a href="http://wp-magazin.ch/wp-content/uploads/typo3-wordpress.gif"><img class="size-full wp-image-1871" title="Beiträge von Typo3 in WordPress importieren" src="http://wp-magazin.ch/wp-content/uploads/typo3-wordpress.gif" alt="Grafik: bradt.ca" width="250" height="250" /></a><p class="wp-caption-text">Grafik: bradt.ca</p></div>
<p>Typo3 ist schon doppelt so lange auf dem Markt wie WordPress und viele Programmierer schwören darauf, so wie ich das mit WordPress mache. Doch für den Datenaustausch zwischen den zwei Content Management Systemen wurde bisher wenig getan. Zwar gibt es gleich <a title="Wordpress Reader" href="http://typo3.org/extensions/repository/view/gl_wordpress/current/">zwei</a> <a title="TIMTAB WordPress Import" href="http://typo3.org/extensions/repository/view/timtab_import_wp/current/">Extensions</a> um Artikel von WordPress in das mächtige Typo3 zu importieren, umgekehrt aber nicht - bis jetzt....</p>
<p>In der Theorie gibt es zwei Möglichkeiten der Umsetzung:</p>
<ol>
<li>WordPress importiert die Beiträge aus einem RSS Feed</li>
<li>Der Import geschieht direkt über die Datenbank</li>
</ol>
<p>Und diese zwei Wege werden wir uns jetzt genauer anschauen. Nur gehen müsst ihr den Weg selbst. ;-)</p>
<p><strong>RSS Feed Import</strong></p>
<p>Praktischerweise kann WordPress nicht nur exportierte Beiträge von anderen System wieder importieren, sondern kennt sich auch mit gewöhnlichen RSS Feeds aus. Und das können wir uns zu Nutze machen, indem wir im News-Modul von Typo3 XML einstellen und somit die Artikel nach und nach von A nach B verschieben können. Leider können mit dieser Methode aber keine Kategorien, Tags oder Kommentare importiert werden.</p>
<p>Die Importfunktion findet ihr bei WordPress 2.7 unter der Rubrik <em>Werkzeuge</em> resp. <em>Tools</em>.</p>
<p><strong>Typo3 to WordPress Migration Plugin</strong></p>
<p>Ebenfalls mit diesem Problem auseinandergesetzt hat sich im letzten November Brad Touesnard, der sich zum Schluss mit einem <a title="bradt.ca - Migrating from Typo3 to WordPress" href="http://bradt.ca/archives/migrating-from-typo3-to-wordpress/">selbstgeschriebenen Plugin</a> zurecht fand. Zwar muss gesagt werden, dass das Plugin für WordPress MU erstellt wurde, es nicht ausreichend getestet wurde und man von Hand noch etwas ergänzen muss. Denn der Code greift direkt auf die Datenbank von Typo3 zu, holt sich die News und schreibt sie in die WP-Datenbank.</p>
<p>Und mit News sind leider auch nur die News gemeint. Wie beim RSS Import können deshalb keine Kategorien oder Tags importiert werden. Trotzdem ist das Plugin ein interessanter Ansatz für alle, die sich dafür interessieren. Natürlich könnte man das auch eleganter lösen, z.B. mit einer Typo3 Extension, die automatisch eine valide WordPress eXtended RSS Datei erstellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/beitraege-von-typo3-in-wordpress-importieren-1860/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Anzahl Feedleser als Text ausgeben</title>
		<link>http://wp-magazin.ch/blog/anzahl-feedleser-als-text-ausgeben-1790/</link>
		<comments>http://wp-magazin.ch/blog/anzahl-feedleser-als-text-ausgeben-1790/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 16:37:25 +0000</pubDate>
		<dc:creator>Pascal Birchler</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[FeedBurner]]></category>
		<category><![CDATA[FeedStats]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://wp-magazin.ch/?p=1790</guid>
		<description><![CDATA[Mit wenigen Handgriffen kann man mittels FeedBurner oder dem FeedStats Plugin die Anzahl der Feedleser ermitteln und ausgeben lassen.]]></description>
			<content:encoded><![CDATA[<p>Um ein bisschen zu prahlen - oder einfach nur der Statistik wegen - kann man im Blog die Anzahl der Personen ausgeben, die den RSS Feed abonniert haben. Wie man weiss ist diese Zahl von Seite zu Seite unterschiedlich: Mache haben 1000 Leser, andere 20, usw. Ab welcher Grössenordnung ihr diese Zahl ausgeben möchtet, hängt von euch und eurem Bauchgefühl ab. Bei wenigen bis gar keinen Nutzern schiesst ihr ein Eigentor, aber ab etwa 100 Stück macht dies durchaus Sinn.  Ich zeige euch zwei Wege, wie ihr mit wenigen Handgriffen zu einem komfortablen Ergebnis kommen könnt. Dazu braucht ihr nur das beliebte Tool <a title="FeedBurner" href="http://feedburner.com/">FeedBurner</a> oder das WordPress Plugin <a title="WordPress Plugins - FeedStats" href="http://wordpress.org/extend/plugins/feedstats-de/">FeedStats</a>, da man ja irgendwie auch die Feedleser zuerst ermitteln muss.</p>
<h3>FeedStats</h3>
<p>Frank Bültges <a title="WordPress Plugins - FeedStats" href="http://wordpress.org/extend/plugins/feedstats-de/">FeedStats Plugin</a> ist meiner Meinung nach das beste auf dem Markt und ziemlich genau beim Zählen. Da man als Administrator nicht viel mehr tun muss, als das Plugin zu installieren und gegebenenfalls die Einstellungen anzupassen. Bei all meinen Blogs hat geht damit alles tadellos - nur eins habe ich bisher nie angewendet: Die Möglichkeit, die Anzahl Feedleser im Blog auszugeben.  Zum Glück hat Frank schon von Anfang an daran gedacht und bietet gleich zwei Funktionen an, um die Anzahl der Feedleser zu ermitteln. Die erste sorgt in etwa für die folgende Auflistung, die man wunderbar in der Sidebar benutzen kann.</p>
<ul>
<li>Gesamt: 8928<small> (Letzten 31 Tage)</small></li>
<li>Maximum: 489 <small>(9. November 2008)</small></li>
<li>Durchschnitt: 288</li>
</ul>
<p>Dazu muss man jetzt bloss folgenden Code irgendwo im Template platzieren: <code>&lt;?php feedstats_getfeeds(); ?&gt;</code></p>
<p>Etwas schlanker und für uns überhaupt erst relevant ist aber eine andere Funktion, mit der man bloss den Durchschnitt der Leser anzeigen lassen kann. Das wäre beim oben genannten Beispiel die Zahl 288. Für das braucht man nur die Funktion <code>&lt;?php feedstats_getfeeds_button(); ?&gt;</code></p>
<p>Möchte man dies noch als schicken Button gestalten, findet man die passenden Informationen dazu in der Readme-Datei.</p>
<h3>FeedBurner</h3>
<p>Seit Google den kostenlosen Statistik-Dienst <a title="FeedBurner" href="http://feedburner.com/">FeedBurner</a> aufgekauft hat, geht es erst so richtig vorwärts. Zwar musste man zwischenzeitlich einmal die Feed URL umstellen und bei vielen wurden die Leser nicht korrekt gezählt, aber im Endefekkt eine tolle Sache. Für die Einbettung von FeedBurner in WordPress braucht man nur das offizielle <a title="WordPress Plugins - FeedSmith" href="http://www.google.com/support/feedburner/bin/answer.py?answer=78483&amp;topic=13252">FeedSmith Plugin</a>, dank dem man bequem aus dem Admin-Bereich die neue Feed-Adresse eintragen kann. Fertig!</p>
<p>Sollte dann alles nach Plan laufen, kann man sich an die nächste Hürde und unser Ziel dieses Beitrags wagen. Wir wollen also die Anzahl Feedleser ausgeben. Das können zwar schon die kitischigen Buttons, aber diese sind etwas in die Jahre gekommen. Viel lieber holen wir uns die Daten selber!</p>
<p>Einfach Code kopieren und an der gewünschten Stelle (Sidebar, Header, etc.) einfügen. Bei Seiten, Artikeln und Widgets braucht man dafür das <a title="WordPress Plugins - Exec-PHP" href="http://wordpress.org/extend/plugins/exec-php/">Exec-PHP Plugin</a>.</p>
<pre><code>&lt;?php

    $feeds = array('Feed1', 'Feed2', 'Feed3');
    // Nur die ID, bei feeds2.feedburner.com/autolos ist dies also "autolos"

    $feedcount = 0; // Neue Variable
    foreach ($feeds as $feed) {
    $url="http://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=$feed";
    $ch = curl_init(); // Initialzündung
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    $data = curl_exec($ch);
    curl_close($ch); // cURL hat sich die Daten geholt, also weiter!
    $xml = new SimpleXMLElement($data); // SimpleXML starten
    $feedcount += $xml-&gt;feed-&gt;entry['circulation']; // zählen
    }
    echo $feedcount; // Endlich fertig!
?&gt;</code></pre>
<p>Zur Erklärung und Hilfestellung:</p>
<ul>
<li>Benötigt werden PHP5 mit cURL und SimpleXML.</li>
<li>Wer seine Daten nicht preisgeben möchte oder falls es nicht funktioniert: Im Adminbereich die Awareness API aus- resp. einschalten</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wp-magazin.ch/blog/anzahl-feedleser-als-text-ausgeben-1790/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

