<?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/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>Philip Hetjens &#187; Wordpress</title>
	<atom:link href="http://hetjens.com/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://hetjens.com</link>
	<description>Ein Blog von Philip Hetjens - Wordpress, Social Media, mein Leben und ein bisschen Spaß</description>
	<lastBuildDate>Sun, 06 Mar 2011 18:06:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Google Font API: Mehr Schriften im Web</title>
		<link>http://hetjens.com/2010/05/20/google-font-api-mehr-schriften-im-web/</link>
		<comments>http://hetjens.com/2010/05/20/google-font-api-mehr-schriften-im-web/#comments</comments>
		<pubDate>Thu, 20 May 2010 06:49:38 +0000</pubDate>
		<dc:creator>Philip Hetjens</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://hetjens.com/?p=97</guid>
		<description><![CDATA[Einfach mehr Schriftarten im Web verwenden mit Google Font API.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><img src="http://hetjens.com/wp-content/uploads/2010/05/font_api-128.gif" width="128" height="128"  alt="" align="left" hspace="5" vspace="5"/>Google hat gestern die <a href="http://code.google.com/intl/de-DE/apis/webfonts/">Google Font API</a> vorgestellt. Damit ist es möglich, wie bereits auch mit anderen Diensten, auf eine grössere Anzahl Schriften im Web zuzugreifen. Google hat ein <a href="http://code.google.com/webfonts">Font Directory</a> aufgesetzt (könnte noch etwas grösser werden), das zeigt welche Schriften verfügbar sind. So wie es aussieht sind diese Schriftarten auch lizenztechnisch unproblematisch. Google versichert auch die Funktionalität unter Internet Explorer ab Version 6 und natürlich allen anderen wichtigen Browsern. Aber da keine SVG-Version der Schrift ausgeliefert wird, funktioniert Googles Font API bis jetzt nicht unter iPhone/iPad.<span id="more-97"></span></p>
<p>Der Trick basiert rein auf CSS, das bedeutet, dass im gegensatz SiRF kein Flash geladen werden muss, und auch der Text einfach markiert und kopiert werden kann durch den Websitebesucher.</p>
<p>Ein Beispiel:</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html&gt;

&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;title&gt;untitled&lt;/title&gt;
  &lt;link href='http://fonts.googleapis.com/css?family=Reenie+Beanie' rel='stylesheet' type='text/css'&gt;
  &lt;style&gt;
    body { font-family: 'Reenie Beanie', serif; font-size: 100px; }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  Hello World
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Wirklich, es funktioniert:</p>
<link href='http://fonts.googleapis.com/css?family=Reenie+Beanie' rel='stylesheet' type='text/css'>
<div style="font-family: 'Reenie Beanie'; font-size: 30px">Das ist jetzt in der Schriftart Reenie Beanie</div>

<!-- google_ad_section_end -->
<br /><table width="100%" cellspacing="0"><tr><td><b><u>Verwandter Artikel</u></b></td></tr><tr><td><table cellspacing="2" cellpadding="0" bgcolor="#ffffff" width="100%"><tr><td colspan="2"><b><a href="http://hetjens.com/2009/12/10/css-runde-ecken/">CSS: Runde Ecken</a></b><br /><font size="2">Abgerundete Ecken werfen ihren Schatten voraus. In Firefox und Webkit-basierten Browsern (Chrome und Safari) funktionieren sie schon. </font><font color="#aaa">(10. Dezember 2009)</font></td></tr></table></td></tr></table><br />]]></content:encoded>
			<wfw:commentRss>http://hetjens.com/2010/05/20/google-font-api-mehr-schriften-im-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<enclosure url="http://hetjens.com/wp-content/uploads/2010/05/font_api-128-neu.gif" type="" />
<media:content url="http://hetjens.com/wp-content/uploads/2010/05/font_api-128-neu.gif" type="" expression="sample" />
	</item>
		<item>
		<title>CSS: Runde Ecken</title>
		<link>http://hetjens.com/2009/12/10/css-runde-ecken/</link>
		<comments>http://hetjens.com/2009/12/10/css-runde-ecken/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 19:40:51 +0000</pubDate>
		<dc:creator>Philip Hetjens</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Border]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://hetjens.com/?p=90</guid>
		<description><![CDATA[Abgerundete Ecken werfen ihren Schatten voraus. In Firefox und Webkit-basierten Browsern (Chrome und Safari) funktionieren sie schon.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Abgerundete Ecken werfen ihren Schatten voraus. In Firefox und Webkit-basierten Browsern (Chrome und Safari) funktionieren sie schon, aber unterschiedlich. Und das ist <i>Nervkram</i>.</p>
<p>Zuerst muss definiert werden, dass überhaupt eine Border angezeigt wird. Sagen wir mal, dass alle Elemente mit der Klasse <i>rundjetzt</i> Runde Ecken haben sollen:</p>
<pre class="brush: css;">
.rundjetzt { border: 1px solid black; }
</pre>
<p>Jetzt definieren wir abgerundete Ecken für Firefox:</p>
<pre class="brush: css;">
.rundjetzt { -moz-border-radius: 5px; }
</pre>
<p>Und jetzt für Webkit:</p>
<pre class="brush: css;">
.rundjetzt { -webkit-border-radius: 5px; }
</pre>
<p>Bis jetzt ist es quasi gleich. Wenn man nur eine Ecke definieren will, wird es komplizert. Mozilla verwendet folgende Syntax:</p>
<pre class="brush: css;">
-moz-border-radius-topleft
-moz-border-radius-bottomright
</pre>
<p>Webkit hingegen hätte gerne:</p>
<pre class="brush: css;">
-webkit-border-top-left-radius
-webkit-border-bottom-right-radius
</pre>
<p>Naja, besser so komisch unterschiedlich benutzen können, als gar nicht benutzen können wie z.B. im Internet Explorer im Opera.</p>

<!-- google_ad_section_end -->
<br /><br />]]></content:encoded>
			<wfw:commentRss>http://hetjens.com/2009/12/10/css-runde-ecken/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress 2.8 Widget-API: Widgets objekt-orientiert entwickeln</title>
		<link>http://hetjens.com/2009/11/27/wordpress-2-8-widget-api-widgets-objekt-orientiert-entwickeln/</link>
		<comments>http://hetjens.com/2009/11/27/wordpress-2-8-widget-api-widgets-objekt-orientiert-entwickeln/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 19:29:07 +0000</pubDate>
		<dc:creator>Philip Hetjens</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[Widget API]]></category>

		<guid isPermaLink="false">http://hetjens.com/?p=88</guid>
		<description><![CDATA[Mit Wordpress 2.8 wurde eine neue Widget-API eingeführt. Durch die neue Schnittstelle wurde die Widgetentwicklung objekt-orientiert und viel einfacher.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>Mit WordPress 2.8 wurde eine neue Widget-API eingeführt. Durch die neue Schnittstelle wurde die Widgetentwicklung objekt-orientiert und viel einfacher.</h4>
<p>Bis einschließlich Version 2.7 war die Entwicklung von Widgets eingeschränkt oder kompliziert: Je nachdem ob nur eine Instanz des Widgets gebraucht wird oder ob es mehrmals aktiviert werden sollte. WordPress 2.8 räumt damit auf. Es gibt gar nicht mehr die Möglichkeit ein Widget nur einmal zu aktivieren.<span id="more-88"></span></p>
<p>Um ein Widget zu schreiben, muss eine Klasse mit vier vorgegebenen Methoden von <i>WP_Widget</i> abgeleitet werden.</p>
<pre class="brush: php;">
class Mein_Neues_Widget extends WP_Widget {
  function Mein_Neues_Widget() {
  }

  function widget($args, $instance) {
  }

  function update($new_instance, $old_instance) {
  }

  function form($instance) {
  }
}
</pre>
<p>Jede Methode übernimmt eine Aufgabe. Der Konstruktor (in diesem Fall die Methode <i>Mein_Neues_Widget</i> muss den Konstruktor der Basisklasse <i>WP_Widget</i> aufrufen. Bei dem Aufruf müssen aber Parameter übergeben werden, die erst definiert werden müssen. Der komplette Konstruktor kann wie folgt aussehen:</p>
<pre class="brush: php;">
function Mein_Neues_Widget() {
  $widget_ops = array(
    'classname' =&gt; 'Mein_Neues_Widget',
    'description' =&gt; 'Hier die Beschreibung für die Widgetseite im wp-admin eintragen'
  );
  $this-&gt;WP_Widget('Mein_Neues_Widget','Name des Widgets im wp-admin',$widget_ops);
}
</pre>
<p>Die <i>Widget</i>-Methode wird von WordPress aufgerufen, sobald das Widget im Blog angezeigt wird. Der Parameter <i>$args</i> ist das bereits von früher bekannte Array mit den Elementen <i>before_widget</i>, <i>before_title</i>, <i>after_title</i> und <i>after_widget</i> damit alle Widgets gleich aussehen und die Struktur vom Theme vorgegeben werden kann. Der zweite Parameter <i>$instance</i> enthält alle Einstellungen, die für diese Widget-Instanz im <i>wp-admin</i> durch den Administrator vorgegeben wurden.</p>
<p>Durch die beiden Methoden <i>form</i> und <i>update</i> kann für jede Instanz im <i>wp-admin</i> ein Konfigurationsfenster angezeigt werden und die Einstellungen gespeichert werden. In <i>form</i> wird das Formular ausgegeben und <i>update</i> sorgt für die Speicherung. Es gibt ein paar Funktionen in WordPress, die dafür sorgen, dass die Input-Felder korrekt den verschiedenen Widgets zugeordnet werden können. Ein Beispiel für ein Feld mit dem Namen title sieht wie folgt aus:</p>
<pre class="brush: php;">
function update($new_instance, $old_instance) {
  $instance = $old_instance;
  $instance['title'] = strip_tags($new_instance['title']);
  return $instance;
}

function form($instance) {
  $instance = wp_parse_args($instance, array(
    'title'=&gt;'Standardtitel'
  ));
  $title = strip_tags($instance['title']);
  echo '&lt;p&gt;&lt;label for=&quot;'.$this-&gt;get_field_id('title').'&quot;&gt;Title:
    &lt;input class=&quot;widefat&quot; id=&quot;'.$this-&gt;get_field_id('title').'&quot;
    name=&quot;'.$this-&gt;get_field_name('title').'&quot; type=&quot;text&quot;
    value=&quot;'.attribute_escape($title).'&quot; /&gt;';
    &lt;/label&gt;&lt;/p&gt;';
}
</pre>
<p>Die <i>Update</i>-Methode hat zwei Parameter. Im ersten Array sind die gerade vom Benutzer neueingegeben Werte und im zweiten Array die alten, bereits gespeicherten Werte. Die Methode muss ein Array zurückgeben, dadurch ist es möglich zu überprüfen, ob die neuen Werte überhaupt einen Sinn ergeben und die Speicherung ggf. zu unterbinden. Wenn überhaupt keine Prüfung stattfinden soll, kann auch einfach die <i>$new_instance</i>-Variable zurückgegeben werden.<br />
In der <i>form</i>-Methode wird zuerst die Funktion <i>wp_parse_args</i> aufgerufen um Standardwerte, falls das Widget gerade zum ersten Mal hinzugefügt wurde, festzulegen. Die beiden Methoden der Basisklasse <i>WP_Widget</i> <i>$this->get_field_id</i> und <i>$this->get_field_name</i> geben eine ID und einen Namen für input-Felder zurück. Wenn diese Funktionen, vor allem die <i>get_field_name</i>, verwendet wird, wird sichergestellt, dass WordPress die Werte korrekt übernehmen kann.<br />
Das Feld title übernimmt übrigens eine besondere Rolle. WordPress zeigt den eingegeben Wert im wp-admin auch im zugeklappten Zustand des Widgets an.</p>
<p>Die Klasse ist nun komplett definiert. Jetzt muss WordPress nur noch gesagt werden, dass diese Klasse auch initialisiert werden soll. Ein eleganter Weg dazu ist die Action <i>widgets_init</i> kombiniert mit einer anonymen Funktion:</p>
<pre class="brush: php;">
add_action('widgets_init', create_function('', 'return register_widget(&quot;Mein_Neues_Widget&quot;);'));
</pre>

<!-- google_ad_section_end -->
<br /><table width="100%" cellspacing="0"><tr><td><b><u>Verwandte Artikel</u></b></td></tr><tr><td><table cellspacing="2" cellpadding="0" bgcolor="#ffffff" width="100%"><tr><td width="60"><a href="http://hetjens.com/2009/08/05/settings-api-wordpress-standardoptionsseiten-erweitern/"><img src="http://hetjens.com/wp-content/uploads/2009/08/settingsapi-neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/08/05/settings-api-wordpress-standardoptionsseiten-erweitern/">Settings API: Wordpress Standardoptionsseiten erweitern</a></b><br /><font size="2">Mit der Settings-API von Wordpress ist es einfach die Optionen des eigenen Plugins in die Wordpress-Optionen einzubinden. </font><font color="#aaa">(5. August 2009)</font></td></tr><tr><td width="60"><a href="http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/"><img src="http://hetjens.com/wp-content/uploads/2009/07/title-extension1-neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/">Default Link Widget: Eigenen Titel für das  Link-Widget einstellen</a></b><br /><font size="2">Dieses Widget ermöglicht einen eigenen Titel für jedes Link-Widget einzustellen. </font><font color="#aaa">(31. Juli 2009)</font></td></tr></table></td></tr></table><br />]]></content:encoded>
			<wfw:commentRss>http://hetjens.com/2009/11/27/wordpress-2-8-widget-api-widgets-objekt-orientiert-entwickeln/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
	<enclosure url="http://hetjens.com/wp-content/uploads/2009/11/widgetapi.jpg" type="" />
<media:content url="http://hetjens.com/wp-content/uploads/2009/11/widgetapi.jpg" type="" expression="sample" />
	</item>
		<item>
		<title>wpSEO: Benutzen wir bei  Blogwerk schon sehr lange</title>
		<link>http://hetjens.com/2009/08/06/wpseo-benutzen-wir-bei-blogwerk-schon-sehr-lange/</link>
		<comments>http://hetjens.com/2009/08/06/wpseo-benutzen-wir-bei-blogwerk-schon-sehr-lange/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 11:12:14 +0000</pubDate>
		<dc:creator>Philip Hetjens</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Blogwerk]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[wpSEO]]></category>

		<guid isPermaLink="false">http://hetjens.com/?p=43</guid>
		<description><![CDATA[wpSEO ist ein klasse Plugin für Wordpress und der Entwickler gibt gute Hilfe.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Das WordPress-Plugin wpSEO benutzen wir bei Blogwerk schon sehr lange. Vor ziemlich genau einen Jahr haben wir auf die kostenpflichtige Version gewechselt (am Anfang gab es noch eine kostenlose Version). Und wir haben es bis heute nicht bereut. Von den Funktionen her bietet WPSEO alles, was man sich wünschen kann (abgesehen vielleicht von einer automatischen Erstellung einer XML-Sitemap). Die Funktionsliste läst sich überall im Internet lesen, darauf möchte ich gar nicht eingehen.<span id="more-43"></span></p>
<p>Ich schreibe hier, weil ich mit der Unterstützung von Sergej, dem Entwickler, super zufrieden bin. Er ist (fast) immer erreichbar, nett und hilfreich. Neue Funktionswunsch? Kein Problem! Gibt&#8217;s meistens mit dem nächsten Update. Das ist genau der Vorteil von kostenpflichtiger Software im Vergleich zur open source Software. Man bekommt guten Support. Bei Open Source Software kann es passieren, dass der Entwickler keine Lust mehr hat, und das Produkt einfach von heute auf morgen einstellt. Bei bezahlter Software passiert das nicht so einfach.</p>
<p><a href="http://clix.superclix.de/cgi-bin/tclix.cgi?id=hetjens&#038;pp=14042&#038;linknr=23563">WPSEO gibt es auf www.wpseo.de (Affiliate-Link)</a>. Sergej hat auch noch ein paar andere Plugins geschrieben, u.a. die <a href="http://antispambee.com/">AntispamBee</a>. Und sein <a href="http://twitter.com/wpSEO">Twitter-Stream</a> ist auch interessant.</p>

<!-- google_ad_section_end -->
<br /><table width="100%" cellspacing="0"><tr><td><b><u>Verwandte Artikel</u></b></td></tr><tr><td><table cellspacing="2" cellpadding="0" bgcolor="#ffffff" width="100%"><tr><td width="60"><a href="http://hetjens.com/2009/08/05/settings-api-wordpress-standardoptionsseiten-erweitern/"><img src="http://hetjens.com/wp-content/uploads/2009/08/settingsapi-neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/08/05/settings-api-wordpress-standardoptionsseiten-erweitern/">Settings API: Wordpress Standardoptionsseiten erweitern</a></b><br /><font size="2">Mit der Settings-API von Wordpress ist es einfach die Optionen des eigenen Plugins in die Wordpress-Optionen einzubinden. </font><font color="#aaa">(5. August 2009)</font></td></tr><tr><td width="60"><a href="http://hetjens.com/2009/08/03/feedburner-wordpress-neues-plugin-mit-besserer-integration/"><img src="http://hetjens.com/wp-content/uploads/2009/08/feedburner_neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/08/03/feedburner-wordpress-neues-plugin-mit-besserer-integration/">Feedburner + Wordpress: Neues Plugin bietet  Zugriff auf verschiedene Feeds</a></b><br /><font size="2">Das Feedsmith-Plugin ist alt und nicht so flexibel. Mein neues Plugin räumt damit auf. </font><font color="#aaa">(3. August 2009)</font></td></tr><tr><td width="60"><a href="http://hetjens.com/2009/08/01/privates-blog-anmeldung-bevor-das-blog-angezeigt-wird/"><img src="http://hetjens.com/wp-content/uploads/2009/07/wplogin-neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/08/01/privates-blog-anmeldung-bevor-das-blog-angezeigt-wird/">Privates Blog: Anmeldung bevor  das Blog angezeigt wird</a></b><br /><font size="2">Dieses Plugin zeigt jedem nicht angemeldeten Besucher des Blogs zuerst den Wordpress-Anmeldebildschirm. Somit kann ein privates Blogs eingerichtet werden. </font><font color="#aaa">(1. August 2009)</font></td></tr></table></td></tr></table><br />]]></content:encoded>
			<wfw:commentRss>http://hetjens.com/2009/08/06/wpseo-benutzen-wir-bei-blogwerk-schon-sehr-lange/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	<enclosure url="http://hetjens.com/wp-content/uploads/2009/08/wpseo-neu.gif" type="" />
<media:content url="http://hetjens.com/wp-content/uploads/2009/08/wpseo-neu.gif" type="" expression="sample" />
	</item>
		<item>
		<title>Settings API: WordPress Standardoptionsseiten erweitern</title>
		<link>http://hetjens.com/2009/08/05/settings-api-wordpress-standardoptionsseiten-erweitern/</link>
		<comments>http://hetjens.com/2009/08/05/settings-api-wordpress-standardoptionsseiten-erweitern/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 10:46:41 +0000</pubDate>
		<dc:creator>Philip Hetjens</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Settings API]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://hetjens.com/?p=42</guid>
		<description><![CDATA[Mit der Settings-API von Wordpress ist es einfach die Optionen des eigenen Plugins in die Wordpress-Optionen einzubinden.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Die Settings-API ist ein einfacher Weg die Optionen eines Plugins in die Standardoptionsseiten von WordPress zu integrieren. Für Plugins mit vielen Optionen eignet sich die API nicht, da dann die Seiten überladen wären, aber für kleine Plugins mit wenigen Optionen ist sie ideal. <a href="http://codex.wordpress.org/Settings_API">Der Codex erklärt die Settings-API</a> schon ganz gut, aber ich hatte trotzdem ein paar Probleme und darum hier dieses Tutorial. <span id="more-42"></span></p>
<p>Alle Aufrufe der Settings-API sollten im Hook &#8216;admin_init&#8217; gemacht werden. Die zwei wichtigsten Aufrufe der API sind die beiden Funktionen <span style="font-family: courier new, courier">add_settings_field</span> zum Anzeigen einer Option und <span style="font-family: courier new, courier">register_setting</span> zum Speichern. Hier zunächst ein Beispiel. Hier wird ein Textfeld auf der &#8220;Schreiben&#8221;-Optionsseite hinzugefügt:</p>
<pre class="brush: php;">
add_action('admin_init', 'test_admin_init');
function test_admin_init() {
  add_settings_field(
    'test_option',
    '&lt;label for=&quot;test_option&quot;&gt;Test&lt;/label&gt;',
    'test_option',
    'writing',
    'default',
    array()
  );
  register_setting('writing','test_option');
}

function test_option() {
  $value = get_option('test_option');
  echo '&lt;input type=&quot;text&quot; class=&quot;regular-text&quot;
    id=&quot;test_option&quot; name=&quot;test_option&quot; value=&quot;'.$value.'&quot; /&gt;';
}
</pre>
<p>Fangen wir mit der einfachen Funktion an: <span style="font-family: courier new, courier">register_setting</span></p>
<p><span style="font-family: courier new, courier">register_setting</span> sorgt dafür, dass eine Option gespeichert wird sobald auf der entsprechenden Seite der Speichern-Button gedrückt wurde. Sie hat zwei Parameter. Der erste Parameter gibt an auf welcher Seite die Option hinzugefügt wurde und beim Speichern mitgespeichert werden soll. Der zweite Parameter ist der Name der Option. Genau unter diesem Namen wird die Option auch in der Datenbank abgelegt. In dem Fall oben ist es die Option <span style="font-family: courier new, courier">test_option</span> auf der Seite <span style="font-family: courier new, courier">writing</span>. Optionen können auf allen acht Standardoptionsseiten von WordPress hinzugefügt werden:</p>
<ul>
<li>general</li>
<li>writing</li>
<li>reading</li>
<li>discussion</li>
<li>media</li>
<li>privacy</li>
<li>permalink</li>
<li>misc</li>
</ul>
<p>Die andere Funktion <span style="font-family: courier new, courier">add_settings_field</span> hat einige Parameter mehr.</p>
<pre class="brush: php;">
add_settings_field(
  $option_name,
  '&lt;label for=&quot;'.$option_name.'&quot;&gt;'.
    $option_description.
  '&lt;/label&gt;',
  $callback_function_name,
  $page,
  'default',
  array()
);
</pre>
<p>Ich denke die meisten Parameter sind so bereits klar. Hier einige Anmerkungen:<br />
Der zweite Parameter gibt den Text vor dem Optionsfeld aus. Bei WordPress ist es üblich, dass dieser Text ein Label ist (also den Fokus an das Input-Element weitergibt). Das geschieht aber nicht automatisch und muss extra angegeben werden. Mit diesem Funktionsaufruf wird noch nicht das Eingabefeld angezeigt. Darum kümmert sich die Callback-Funktion. Hier das passende Beispiel:</p>
<pre class="brush: php;">
function test_option() {
  $value = get_option('test_option');
  echo '&lt;input type=&quot;text&quot; class=&quot;regular-text&quot;
    id=&quot;test_option&quot; name=&quot;test_option&quot; value=&quot;'.$value.'&quot; /&gt;';
}
</pre>
<p>Die Funktion muss den aktuellen Wert selbst laden und anschließend das komplette Input-Element ausgeben. Der Name des Input-Elements muss der Name der Option sein (s. <span style="font-family: courier new, courier">register_setting</span>). Bitte nicht die ID vergessen, sonst funktioniert das label nicht.</p>
<h2>Gruppieren</h2>
<p>Wenn das Plugin mehr als eine Option hat, ist es sinnvoll die Optionen zu gruppieren. Dafür muss zuerst eine Gruppe anlegt werden und anschließend können die Optionen dieser Gruppe zuordnen werden. Gruppe anlegen:</p>
<pre class="brush: php;">
add_action('admin_init', 'test_admin_init');
function test_admin_init() {
  add_settings_section(
    'test_section',
    'Test Titel',
    'test_section_description',
    'writing'
  );
  ...
}

function test_section_description() {
  echo '&lt;p&gt;info&lt;/p&gt;';
}
</pre>
<p>Die Callback-Funktion gibt die Beschreibung zu der Gruppe aus und wird vor den Optionsfeldern angezeigt. Damit sie richtig formatiert wird, sollte in der Callback-Funktion auch ein Absatz ausgegeben werden. Um ein Optionsfeld dieser Gruppe zuzuordnen, muss nur der vorletzte Parameter in der <span style="font-family: courier new, courier">add_settings_field</span> von &#8216;default&#8217; auf den Sectionname (im Beispiel &#8216;test_section&#8217;) geändert werden. Beispiel:</p>
<pre class="brush: php;">
add_settings_field(
  'test_option',
  '&lt;label for=&quot;test_option&quot;&gt;Test&lt;/label&gt;',
  'test_option',
  'writing',
  'test_section',
  array()
);
</pre>
<h2>Best Practise</h2>
<p>Ich habe jetzt schon einige male die Settings-API benutzt. Dabei wurde mir eins klar. Es ist wichtig die Bezeichner überall gleich zu wählen, sonst kommt man durcheinander. Was meine ich damit: Im Falle der test_option habe ich an allen Stelle test_option verwendet:</p>
<ul>
<li>Optionsname</li>
<li>Name der Callback-Funktion (ggf. mit einheitlichem Prefix versehen)</li>
<li>Name und ID des Input-Elements</li>
</ul>
<p>Das Gleiche gilt natürlich auch für die Section und deren Callback-Funktion. Wenn möglich sollte auch eine Vereinheitlichung über Plugingrenzen angestrebt werden.</p>
<p>Die Settings-API unterstützt auch die objekt-orientierte Programmierung. Alle Callback-Funktionen können auch als <span style="font-family: courier new, courier">array</span> mit Verweis auf <span style="font-family: courier new, courier">&#038;$this</span> angegeben werden.</p>

<!-- google_ad_section_end -->
<br /><table width="100%" cellspacing="0"><tr><td><b><u>Verwandte Artikel</u></b></td></tr><tr><td><table cellspacing="2" cellpadding="0" bgcolor="#ffffff" width="100%"><tr><td width="60"><a href="http://hetjens.com/2009/08/03/feedburner-wordpress-neues-plugin-mit-besserer-integration/"><img src="http://hetjens.com/wp-content/uploads/2009/08/feedburner_neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/08/03/feedburner-wordpress-neues-plugin-mit-besserer-integration/">Feedburner + Wordpress: Neues Plugin bietet  Zugriff auf verschiedene Feeds</a></b><br /><font size="2">Das Feedsmith-Plugin ist alt und nicht so flexibel. Mein neues Plugin räumt damit auf. </font><font color="#aaa">(3. August 2009)</font></td></tr><tr><td width="60"><a href="http://hetjens.com/2009/08/01/privates-blog-anmeldung-bevor-das-blog-angezeigt-wird/"><img src="http://hetjens.com/wp-content/uploads/2009/07/wplogin-neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/08/01/privates-blog-anmeldung-bevor-das-blog-angezeigt-wird/">Privates Blog: Anmeldung bevor  das Blog angezeigt wird</a></b><br /><font size="2">Dieses Plugin zeigt jedem nicht angemeldeten Besucher des Blogs zuerst den Wordpress-Anmeldebildschirm. Somit kann ein privates Blogs eingerichtet werden. </font><font color="#aaa">(1. August 2009)</font></td></tr><tr><td width="60"><a href="http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/"><img src="http://hetjens.com/wp-content/uploads/2009/07/title-extension1-neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/">Default Link Widget: Eigenen Titel für das  Link-Widget einstellen</a></b><br /><font size="2">Dieses Widget ermöglicht einen eigenen Titel für jedes Link-Widget einzustellen. </font><font color="#aaa">(31. Juli 2009)</font></td></tr></table></td></tr></table><br />]]></content:encoded>
			<wfw:commentRss>http://hetjens.com/2009/08/05/settings-api-wordpress-standardoptionsseiten-erweitern/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	<enclosure url="http://hetjens.com/wp-content/uploads/2009/08/settingsapi-neu.gif" type="" />
<media:content url="http://hetjens.com/wp-content/uploads/2009/08/settingsapi-neu.gif" type="" expression="sample" />
	</item>
		<item>
		<title>Privates Blog: Anmeldung bevor  das Blog angezeigt wird</title>
		<link>http://hetjens.com/2009/08/01/privates-blog-anmeldung-bevor-das-blog-angezeigt-wird/</link>
		<comments>http://hetjens.com/2009/08/01/privates-blog-anmeldung-bevor-das-blog-angezeigt-wird/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 13:31:21 +0000</pubDate>
		<dc:creator>Philip Hetjens</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://hetjens.com/?p=37</guid>
		<description><![CDATA[Dieses Plugin zeigt jedem nicht angemeldeten Besucher des Blogs zuerst den Wordpress-Anmeldebildschirm. Somit kann ein privates Blogs eingerichtet werden.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><img src="http://hetjens.com/wp-content/uploads/2009/07/wplogin.gif" width="280" height="265"  alt="Es wird zuerst der Login-Bildschirm gezeigt." align="left" hspace="5" vspace="5"/>
<p>Es gibt Situationen da ist es praktisch, wenn das Blog nicht öffentlich zugänglich ist. Dafür gibt es (neben einigen anderen Plugins) jetzt auch das &#8220;Hetjens Registered Only&#8221;-Plugin. Es basiert auf der Arbeit von Carthik A. Sharma wurde aber trotz nur 20 Zeilen Code stark verändert.</p>
<p>Sobald das Plugin aktiviert ist, wird jedem nicht angemeldeten Besucher der WordPress-Anmeldebildschirm gezeigt. Nach der erfolgreichen Anmeldung wird der Besucher weitergeleitet zu der Seite, die er eigentlich aufrufen wollte (egal, ob Homepage, wp-admin oder einen Artikel) [Das ist aber in WordPress eingebaute Funktionalität und wird nicht durch das Plugin bereitgestellt].</p>
<p><strong>Version 0.3 &#8211; <a href="http://hetjens.com/wp-content/uploads/2009/07/Hetjens_Registered_Only-0.3.zip">Download</a></strong></p>

<!-- google_ad_section_end -->
<br /><table width="100%" cellspacing="0"><tr><td><b><u>Verwandter Artikel</u></b></td></tr><tr><td><table cellspacing="2" cellpadding="0" bgcolor="#ffffff" width="100%"><tr><td width="60"><a href="http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/"><img src="http://hetjens.com/wp-content/uploads/2009/07/title-extension1-neu.gif" height="55" width="55" border="0"></a></td><td><b><a href="http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/">Default Link Widget: Eigenen Titel für das  Link-Widget einstellen</a></b><br /><font size="2">Dieses Widget ermöglicht einen eigenen Titel für jedes Link-Widget einzustellen. </font><font color="#aaa">(31. Juli 2009)</font></td></tr></table></td></tr></table><br />]]></content:encoded>
			<wfw:commentRss>http://hetjens.com/2009/08/01/privates-blog-anmeldung-bevor-das-blog-angezeigt-wird/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<enclosure url="http://hetjens.com/wp-content/uploads/2009/07/wplogin-neu.gif" type="" />
<media:content url="http://hetjens.com/wp-content/uploads/2009/07/wplogin-neu.gif" type="" expression="sample" />
	</item>
		<item>
		<title>Default Link Widget: Eigenen Titel für das  Link-Widget einstellen</title>
		<link>http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/</link>
		<comments>http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 21:20:10 +0000</pubDate>
		<dc:creator>Philip Hetjens</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Widget]]></category>

		<guid isPermaLink="false">http://hetjens.com/?p=31</guid>
		<description><![CDATA[Dieses Widget ermöglicht einen eigenen Titel für jedes Link-Widget einzustellen.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><img src="http://hetjens.com/wp-content/uploads/2009/07/title-extension1.gif" width="280" height="321"  alt="Dieses Plugin ermöglicht die einfache Eingabe eines Titels für das Link-Widget" align="left" hspace="5" vspace="5"/>Automattic hat bei der Entwicklung von WordPress leider nicht vorgesehen, dass bei dem Link-Widget der Titel eingestellt werden kann. Es wird immer der ausgewählte Kategoriename angezeigt. </p>
<p>Manchmal kann es aber sinnvoll sein einen abweichsenden Titel einzustellen. Diese Möglichkeit bietet das <em>&#8220;Hetjens Link Widget Title Plugin&#8221;</em>. Es wurde nur mit WordPress 2.8.x getestet. Mit älteren Versionen kann es nicht funktionieren, da mit WP-2.8 die Schnittstelle für Widgets geändert wurde.<span id="more-31"></span></p>
<p>Nach der Aktivierung gibt es in dem Einstellungsdialog des Widgets eine Text-Box für den Titel. Dieser eingegebene Titel wird als Widget-Title auf dem Blog angezeigt. Wird das Feld leer gelassen, zeigt das Plugin den Standardtitel (Kategorienamen) an.</p>
<p><strong>Version: 0.1 &#8211; <a href="http://hetjens.com/wp-content/uploads/2009/07/Hetjens_Link_Widget_Title-0.1.zip">Download</a></strong></p>

<!-- google_ad_section_end -->
<br /><br />]]></content:encoded>
			<wfw:commentRss>http://hetjens.com/2009/07/31/default-link-widget-eigenen-titel-fuer-das-link-widget-einstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<enclosure url="http://hetjens.com/wp-content/uploads/2009/07/title-extension1-neu.gif" type="" />
<media:content url="http://hetjens.com/wp-content/uploads/2009/07/title-extension1-neu.gif" type="" expression="sample" />
	</item>
	</channel>
</rss>

