<?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>PHP Log &#187; Plugin</title>
	<atom:link href="http://www.php-log.de/tags/plugin/feed" rel="self" type="application/rss+xml" />
	<link>http://www.php-log.de</link>
	<description>Eine feine Sammlung nützlicher PHP Notizen</description>
	<lastBuildDate>Mon, 20 Sep 2010 00:22:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Einstieg in das Plugin Development für WordPress</title>
		<link>http://www.php-log.de/197/php/einstieg-in-das-plugin-development-fur-wordpress</link>
		<comments>http://www.php-log.de/197/php/einstieg-in-das-plugin-development-fur-wordpress#comments</comments>
		<pubDate>Thu, 12 Mar 2009 06:10:35 +0000</pubDate>
		<dc:creator>ralle</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.php-log.de/?p=197</guid>
		<description><![CDATA[Glücklicherweise hat mich jemanden gefunden der mich für die Entwicklung eines WordPress Plugins bezahlt. Hallelujah So bekomme ich die Einarbeitung in dieses feine Stückchen Software auch noch bezahlt. Die Erfahrungen die ich während der Entwicklung des Plugins mache will ich in diesem Artikel dokumentieren. Links WordPress Plugin API Erläutert die grundsätzliche Funktionsweise der API, insbesondere [...]]]></description>
			<content:encoded><![CDATA[<p>Glücklicherweise hat mich jemanden gefunden der mich für die Entwicklung eines WordPress Plugins bezahlt. Hallelujah <img src='http://www.php-log.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  So bekomme ich die Einarbeitung in dieses feine Stückchen Software auch noch bezahlt. Die Erfahrungen die ich während der Entwicklung des Plugins mache will ich in diesem Artikel dokumentieren.<span id="more-197"></span></p>
<h2>Links</h2>
<ul>
<li><a href="http://codex.wordpress.org/Plugin_API" target="_blank">WordPress Plugin API</a><br />
Erläutert die grundsätzliche Funktionsweise der API, insbesondere Sinn und Zweck von  Hook, Action und Filter</li>
<li><a href="http://codex.wordpress.org/Writing_a_Plugin">Offizielles How To</a><br />
Ein Einführung in die Materie</li>
<li><a href="http://codex.wordpress.org/Plugin_API/Filter_Reference" target="_blank">Filter Referenz</a><br />
Wordpress API/Filter Referenzseite auf WordPress.org</li>
<li><a href="http://codex.wordpress.org/Plugin_API/Action_Reference" target="_blank">Action Referenz</a><br />
Wordpress API/Action Referenzseite auf WordPress.org</li>
<li><a href="http://adambrown.info/p/wp_hooks" target="_blank">Hooks Datenbank</a><br />
Zeigt alle verfügbaren Hooks, zu allen Releases von WordPress</li>
<li><a href="http://codex.wordpress.org/Function_Reference" target="_blank">WordPress Funktions Referenz</a><br />
Grundlegende Funktionen für die WordPress Programmierung</li>
<li><a href="http://xref.redalt.com/wptrunk/nav.htm?_constants/index.htm">Constants</a><br />
Eine Liste aller in WordPress verfügbaren PHP Konstanten</li>
<li><a href="http://codex.wordpress.org/Function_Reference/wpdb_Class">WPDB</a><br />
Die WordPress Datenbank Klasse. Braucht man Anfangs sicher öfter mal, obwohl der Zugriff auf die Datenbank erfrischend mit dieser Klasse erfrischend unkompliziert ist.</li>
</ul>
<h2>Plugin Namen und Dateien</h2>
<p>Die ersten Gedanken die man sich macht sollten dem Namen des Plugins gelten. Das Howto empfiehlt eine Google Recherche nach dem Namen und es sollte wenn möglich ein sprechender Name sein, der einen Bezug zur Funktion des Plugins hat. Das wichtigste ist aber sicherzustellen dass der Name eindeutig &#8211; Unique &#8211; ist. Es gibt eine ganze Reihe von Plugins und es werden ständig mehr, da sollte der Name so gewählt werden das Konflikte ausgeschlossen werden. Ich denke das ich meine Plugins Prefixen werde.</p>
<p>Ein Plugin kann aus einer einzelnen PHP Datei bestehen oder aus einer Reihe verschiedenster Dateien, die dann in einem Ordner zusammengefasst werden. Plugins werden einfach im Ordner /wp-content/plugins abgelegt, Ordner ebenso. Es ist möglich viele PHP Dateien in einem Ordner abzulegen. In diesem Fall sollte der Name PHP-Hauptdatei  vom Namen  des Ordner abgeleitet sein.</p>
<h2>Plugin Header</h2>
<p>Die Hauptdatei enthält die Plugin Header. Diese werden von WordPress automatisch erkannt und in der Plugin Verwaltung genutzt.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*
Plugin Name: Name Of The Plugin
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the Plugin.
Version: The Plugin's Version Number, e.g.: 1.0
Author: Name Of The Plugin Author
Author URI: http://URI_Of_The_Plugin_Author
*/</span></pre></div></div>

<p>Diese Kommentare am Kopf der &#8220;Main&#8221; PHP Datei reichen aus um in der Plugin Verwaltung folgendes zu erzeugen.</p>
<div id="attachment_200" class="wp-caption alignleft" style="width: 706px"><img class="size-full wp-image-200" title="plugin-header-correlation" src="http://www.php-log.de/wp-content/uploads/2009/03/plugin-header-correlation.png" alt="Wie die Header eines Plugins in der Plugin Verwarltung genutzt werden" width="696" height="141" /><p class="wp-caption-text">Wie die Header eines Plugins in der Plugin Verwaltung genutzt werden</p></div>
<p>Das Plugin lässt sich bereits an dieser Stelle aktivieren, obwohl es ausschließlich aus PHP Kommentaren besteht. Bei der Beschreibung muss man sich auch nicht zurückhalten und kann durchaus Zeilenumbrüche verwenden.</p>
<h2>Hooks</h2>
<p>Um nun mit dem System interagieren zu können bietet WordPress einen Hook-Mechanismus an. Dieser Mechanismus ermöglicht es während der Abarbeitung eines Requests eigene Funktionen auf zurufen, und so Einfluss auf den nehmen zu können. Das &#8220;Einhängen&#8221; in den Prozess der Seitenerzeugung geschieht entweder über &#8220;Actions&#8221; oder &#8220;Filter&#8221;, die in den Ablaufstack registriert werden. Zur Zeit gibt es 800 verschiedene Hooks die verfügbar sind.</p>
<h2>Action</h2>
<p>Ein Actions sind Einstiegspunkte die der WordPress Core während der Seitenerzeugung oder auf bestimme Ereignisse (Events) hin auslöst. Methode add_action() registiert einen beliebigen Funktionsaufruf, der ausgeführt wird, wenn der Ablauf Stack bei der Action angelangt ist. <a href="http://codex.wordpress.org/Plugin_API/Action_Reference" target="_blank">Zur Action Referenz</a></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// add_action($tag, $function, $priority = 10, $accepted_args = 1);</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'publish_post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'meine_plugin_function'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<ul>
<li><strong>$action</strong> Der Name der Action</li>
<li><strong>$function</strong> Der Name der Callback Funktion</li>
<li><strong>$priority</strong> (default ist 10) 5 läuft eher als 15</li>
<li><strong>$accepted_args </strong>Die Anzahl an Argumenten die diese Funktion erwartet</li>
</ul>
<h2>Filter</h2>
<p>Funktionieren im Prinzip genauso wie Actions, der Unterschied ist das in jedem Fall Daten durch durch einen Filter geleitet und verarbeitet werden. Es gibt sicher viele Aufgaben die sich sowohl mit einem Filter als auch mit einer Action erledigen lassen. Das Registrieren wird durch add_filter() erledigt, die Argumente sind die selben wie bei add_action(). <a href="http://codex.wordpress.org/Plugin_API/Filter_Reference" target="_blank">Zur Filter Referenz</a></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'hook_name'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'your_filter'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span>accepted_args<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>Herrausfinden welche Filter und Aktionen zur Verfügung stehen</h2>
<p>Leider habe ich bisher keine Funktion gefunden die anzeigt welche Filter und Aktionen während der Seitenerzeugung aufgerufen. Da es derzeit über 800 Hooks gibt und längst nicht jeder Hook in jedem Request zur Verfügung steht wäre, eine solche Funktion den meisten Entwicklern sicher höchst willkommen. Es gibt aber eine relativ einfache Zwischenlösung für dieses Problem. Verantworlich für das Abfeuern der einzelnen Hooks sind zwei Funktionen in der Datei /wp-includes/plugin.php. Die beiden Funktionen heissen apply_filters() und do_action(). In beiden Funktionen wird am Ende eine For-Schleife durchlaufen, an dieser Stelle kann man den Inhalt des Arrays $the_ ausgeben und bekommt so Informationen über das Ablaufverhalten eines Requests.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">do</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_filter</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$the_</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$the_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Diese Zeile einfügen...</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$the_</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'function'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #990000;">call_user_func_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$the_</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'function'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array_slice</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$the_</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'accepted_args'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wp_filter</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Im nächsten Teil wird gezeigt wie man Links in die verschiedenen Menüs einfügt</p>
]]></content:encoded>
			<wfw:commentRss>http://www.php-log.de/197/php/einstieg-in-das-plugin-development-fur-wordpress/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

