<?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>Simbo.de &#187; PHP</title>
	<atom:link href="http://simbo.de/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://simbo.de</link>
	<description>Digitales Allerlei.</description>
	<lastBuildDate>Mon, 21 Jun 2010 13:50:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>pretty_date &#8211; relative Zeitangaben in Worten</title>
		<link>http://simbo.de/blog/2009/12/pretty-date-relative-zeitangaben-in-worten/</link>
		<comments>http://simbo.de/blog/2009/12/pretty-date-relative-zeitangaben-in-worten/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 15:52:06 +0000</pubDate>
		<dc:creator>Simbo</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://simbo.de/site/?p=75</guid>
		<description><![CDATA[Die Funktion pretty_date() erwartet als Parameter ein beliebiges in englischer Textform angegebenes Datum (siehe strtotime) und liefert eine Zeitangabe in Worten relativ zum jetzigen Zeitpunkt zurück, z.b. &#8220;vor einer viertel Stunde&#8221;, &#8220;heute Morgen&#8221;, &#8220;gestern Abend&#8221; oder &#8220;vor 2 Wochen&#8221;.

string pretty_date ( [ string $datestr='' ] )
Definition der Datumsangaben

Liegt das Datum weniger als 12,5 Minuten in [...]]]></description>
			<content:encoded><![CDATA[<p>Die Funktion <code>pretty_date()</code> erwartet als Parameter ein beliebiges in englischer Textform angegebenes Datum (siehe <code><a href="http://www.php.net/strtotime/">strtotime</a></code>) und liefert eine Zeitangabe in Worten relativ zum jetzigen Zeitpunkt zurück, z.b. <em>&#8220;vor einer viertel Stunde&#8221;</em>, <em>&#8220;heute Morgen&#8221;</em>, <em>&#8220;gestern Abend&#8221;</em> oder <em>&#8220;vor 2 Wochen&#8221;</em>.</p>
<p><span id="more-75"></span></p>
<p><em>string</em> <strong>pretty_date (</strong> [ <em>string</em> $datestr='' ] <strong>)</strong></p>
<h4>Definition der Datumsangaben</h4>
<dl>
<dt>Liegt das Datum weniger als 12,5 Minuten in der Vergangenheit wird ein String in folgender Form zurückgeliefert:</dt>
<dd><em>&#8220;vor einer Sekunde&#8221;, &#8220;vor <code>X</code> Sekunden&#8221;, &#8220;vor einer Minute&#8221;, &#8220;vor <code>X</code> Minuten&#8221;</em></dd>
<dt>Bei weniger als 60 Minuten:</dt>
<dd><em>&#8220;vor einer viertel Stunde&#8221;, &#8220;vor einer halben Stunde&#8221;, &#8220;vor einer dreiviertel Stunde&#8221;</em></dd>
<dt>Bei weniger als 6 Stunden:</dt>
<dd><em>&#8220;vor einer Stunde&#8221;, &#8220;vor <code>X</code> Stunden&#8221;</em></dd>
<dt>Bei weniger als 36 Stunden:</dd>
<dd><em>&#8220;heute Vormittag&#8221;, &#8220;letzte Nacht&#8221;, &#8220;gestern Abend&#8221;, &#8220;vorgestern Nachmittag&#8221;&#8230;</em><br />
Dabei gilt:</p>
<dl>
<dt><em>&#8220;Morgen&#8221;</em></dt>
<dd>(Tag beginnt) 05:00 &#8211; 9:00</dd>
<dt><em>&#8220;Vormittag&#8221;</em></dt>
<dd>09:00 &#8211; 11:30</dd>
<dt><em>&#8220;Mittag&#8221;</em></dt>
<dd>11:30 &#8211; 13:30</dd>
<dt><em>&#8220;Nachmittag&#8221;</em></dt>
<dd>13:30 &#8211; 18:00</dd>
<dt><em>&#8220;Abend&#8221;</em></dt>
<dd>18:00 &#8211; 22:30</dd>
<dt><em>&#8220;Nacht&#8221;</em></dt>
<dd>22:30 &#8211; 05:00 (Tag endet)</dd>
</dl>
</dd>
<dt>Bei weniger als 7 Tagen:</dt>
<dd><em>&#8220;vor einem Tag&#8221;, &#8220;vor <code>X</code> Tagen&#8221;</em></dd>
<dt>Bei weniger als 4 Wochen:</dt>
<dd><em>&#8220;vor einer Woche&#8221;, &#8220;vor <code>X</code> Wochen&#8221;</em></dd>
<dt>Bei weniger als 12 Monaten:</dt>
<dd><em>&#8220;vor einem Monat&#8221;, &#8220;vor <code>X</code> Monaten&#8221;</em></dd>
<dt>Bei weniger als 18 Monaten:</dt>
<dd><em>&#8220;vor einem Jahr&#8221;, &#8220;vor eineinhalb Jahren&#8221;</em></dd>
<dt>Bei mehr als 18 Monaten:</dt>
<dd><em>&#8220;vor <code>X</code> Jahren&#8221;</em></dd>
</dl>
<h4>Quelltext</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> pretty_date<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$datestr</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$now</span> <span style="color: #339933;">=</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$date</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$datestr</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$now</span><span style="color: #339933;">-</span><span style="color: #000088;">$date</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">60</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor '</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span>?<span style="color: #0000ff;">'einer Sekunde'</span><span style="color: #339933;">:</span><span style="color: #000088;">$d</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' Sekunden'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$d</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">&lt;</span> <span style="color:#800080;">12.5</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor '</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span>?<span style="color: #0000ff;">'einer Minute'</span><span style="color: #339933;">:</span><span style="color: #000088;">$d</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' Minuten'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>
			<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor einer viertel Stunde'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>
			<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor einer halben Stunde'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">:</span>
			<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor einer dreiviertel Stunde'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$d</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">6</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor '</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span>?<span style="color: #0000ff;">'einer Stunde'</span><span style="color: #339933;">:</span><span style="color: #000088;">$d</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' Stunden'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">36</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// ein Tag beginnt um 5 Uhr morgens</span>
		<span style="color: #000088;">$day_start</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'j'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$now</span><span style="color: #339933;">-</span><span style="color: #000088;">$day_start</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">3600</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'j'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">-</span><span style="color: #000088;">$day_start</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">3600</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'heute'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'j'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$now</span><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$day_start</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">3600</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'j'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">-</span><span style="color: #000088;">$day_start</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">3600</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'gestern'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">else</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'vorgestern'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$hour_date</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'G'</span><span style="color: #339933;">,</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'i'</span><span style="color: #339933;">,</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">60</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$hour_now</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'G'</span><span style="color: #339933;">,</span><span style="color: #000088;">$now</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'i'</span><span style="color: #339933;">,</span><span style="color: #000088;">$now</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">60</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&gt;=</span><span style="color:#800080;">22.5</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&lt;</span><span style="color: #000088;">$day_start</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$r</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'gestern'</span> ? <span style="color: #0000ff;">'letzte Nacht'</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$r</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' Nacht'</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&gt;=</span><span style="color: #000088;">$day_start</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">9</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' Morgen'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&gt;=</span><span style="color: #cc66cc;">9</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&lt;</span><span style="color:#800080;">11.5</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' Vormittag'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&gt;=</span><span style="color:#800080;">11.5</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&lt;</span><span style="color:#800080;">13.5</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' Mittag'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&gt;=</span><span style="color:#800080;">13.5</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">18</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' Nachmittag'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&gt;=</span><span style="color: #cc66cc;">18</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$hour_date</span><span style="color: #339933;">&lt;</span><span style="color:#800080;">22.5</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$r</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' Abend'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$r</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$d</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">24</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">7</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor '</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span>?<span style="color: #0000ff;">'einem Tag'</span><span style="color: #339933;">:</span><span style="color: #000088;">$d</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' Tagen'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$d_weeks</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$d</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d_weeks</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">4</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d_weeks</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor '</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span>?<span style="color: #0000ff;">'einer Woche'</span><span style="color: #339933;">:</span><span style="color: #000088;">$d</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' Wochen'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$d</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">12</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor '</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span>?<span style="color: #0000ff;">'einem Monat'</span><span style="color: #339933;">:</span><span style="color: #000088;">$d</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' Monaten'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">18</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor einem Jahr'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$d</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">21</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor eineinhalb Jahren'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">12</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'vor '</span><span style="color: #339933;">.</span><span style="color: #000088;">$d</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' Jahren'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://simbo.de/blog/2009/12/pretty-date-relative-zeitangaben-in-worten/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>AJAX Kommentare</title>
		<link>http://simbo.de/blog/2009/12/ajax-kommentare/</link>
		<comments>http://simbo.de/blog/2009/12/ajax-kommentare/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 16:44:26 +0000</pubDate>
		<dc:creator>Simbo</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Theme Entwicklung]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://simbo.de/site/?p=299</guid>
		<description><![CDATA[Es gibt zahlreiche Plugins für Wordpress, die dafür sorgen, dass Kommentare von Besuchern per AJAX eingetragen werden. Die meisten davon schaffen es nicht lange mit den aktuellen Versionen von Wordpress kompatibel zu bleiben und diejenigen die es schaffen, sind so überladen mit Schnickschnack und hässlichen Frontendgestaltungen, dass ich soviel Zeit brauche alles nach meinen Wünschen [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt zahlreiche Plugins für Wordpress, die dafür sorgen, dass Kommentare von Besuchern per AJAX eingetragen werden. Die meisten davon schaffen es nicht lange mit den aktuellen Versionen von Wordpress kompatibel zu bleiben und diejenigen die es schaffen, sind so überladen mit Schnickschnack und hässlichen Frontendgestaltungen, dass ich soviel Zeit brauche alles nach meinen Wünschen anzupasssen, da kann ich gleich alles von vornerein neu machen.</p>
<p><span id="more-299"></span></p>
<p>Zuerst mal brauche ich dafür ein PHP-Skript, dass nicht nur die Formulardaten verarbeitet und bei erfolgreicher Überprüfung ein neues Kommentar anlegt, sondern auch eine Ausgabe erzeugt, die man mit Javascript leicht verarbeiten kann.</p>
<h4>Die normale Kommentarverarbeitung in Wordpress 2.8+</h4>
<p>Ohne AJAX übernimmt die Datei <code>wp-comments-post.php</code>, die sich im Wordpress-Stammverzeichnis befindet, das Verarbeiten des Kommentarformulars. Kann ein Kommentar, aus welchen Gründen auch immer, nicht eingetragen werden, gibt das Skript über die Wordpress-interne Funktion <code>wp_die()</code> eine kleine HTML-Seite mitsamt Fehlerbeschreibung aus. Sollte nichts gegen das Erstellen des Kommentars sprechen, wird es angelegt und mit der ebenfalls Wordpress-internen Funktion <code>wp_redirect()</code> wird auf die zum Kommentar gehörende Artikelseite weitergeleitet.</p>
<p>Die Vermeidung von Doppelpostings und Flooding wird nicht direkt innerhalb von <code>wp-comment-post.php</code> geregelt, sondern im Zuge der Funktion <code>wp_new_comment()</code>. Die per Filter im Laufe der Funktion angewandten Funktionen <code>wp_allow_comment()</code> und <code>check_comment_flood_db()</code> (beide definiert in <code>wp-includes/comment.php</code>) sind dafür verantwortlich und liefern bei positivem Befund ebenfalls eine HTML-Seite per <code>wp_die()</code>. Aber hier haben die Wordpress-Entwickler bereits Vorarbeit geleistet: Ist eine Konstante namens <code>DOING_AJAX</code> definiert, wird bei Doppelpostings und Flooding stattdessen direkt <code>die()</code> verwendet und die Fehlermeldung als reiner Text ausgegeben.</p>
<h4>Los gehts&hellip;</h4>
<p>Ich nehme mir also die Datei <code>wp-comments-post.php</code> als Vorlage für mein PHP-Skript zur Formularverarbeitung mit AJAX. Dazu erstelle ich eine Kopie der Datei unter dem Namen <code>new-comment.php</code> und speichere diese im Unterverzeichnis <code>ajax</code> meines Themeordners. Falls bei einem zukünftigen Update von Wordpress die <code>wp-comments-post.php</code> verändert wird und ich somit meine <code>new-comment.php</code> neu erstellen muss, markiere ich vorsichtshalber alle geänderten Stellen im Quelltext um die Anpassungen später besser nachvollziehen und wiederholen zu können. Ich habe auf Wordpress.org auch bereits den <a href="http://wordpress.org/extend/ideas/topic.php?id=3389">Vorschlag gemacht</a>, diese Anpassungen von Haus aus in <code>wp-comments-post.php</code> zu integrieren um die Implementierung von AJAX Kommentaren in Zukunft zu vereinfachen.</p>
<p>Damit das Skript innerhalb der Wordpress-Umgebung ausgeführt wird, muss der Pfad zu <code>wp-load.php</code> ziemlich am Anfang der Datei angepasst werden. Direkt davor füge ich <code>define('DOING_AJAX',1);</code> ein. Damit anstatt der HTML-Fehlerseiten reine Textnachrichten ausgegeben werden, ersetze ich alle Vorkommen von <code>wp_die()</code> durch die Funktion <code>die()</code>. Die letzten 3 Zeilen der Datei, die verantwortlich für den Redirect sind, kommentiere ich aus. In der Variablen <code>$comment</code> ist nun das Objekt des eben erstellten Kommentars gespeichert. Nachdem ich den Content des Kommentars gefiltert und das Datum formatiert habe, verwandle ich das Objekt in einen JSON-String und gebe ihn per <code>die()</code> aus. Das PHP-Skript liefert nun also im Fehlerfall eine Textmeldung zurück und im Erfolgsfalls das eben erstellte Kommentar.</p>
<p>Meine <code>new-comment.php</code> sieht jetzt so aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**-----------------------------------------------------------------------------
 *	start	/wp-comments-post.php
 *	changes start with //## and end with //^^
 */</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'POST'</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REQUEST_METHOD'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Allow: POST'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HTTP/1.1 405 Method Not Allowed'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Type: text/plain'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/** Sets up the WordPress Environment. */</span>
<span style="color: #666666; font-style: italic;">//## require( dirname(__FILE__) . '/wp-load.php' );</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DOING_AJAX'</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">require</span>  <span style="color: #0000ff;">'../../../../wp-load.php'</span> <span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//^^</span>
&nbsp;
nocache_headers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$comment_post_ID</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'comment_post_ID'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$status</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_row</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT post_status, comment_status FROM <span style="color: #006699; font-weight: bold;">$wpdb-&gt;posts</span> WHERE ID = <span style="color: #009933; font-weight: bold;">%d</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$comment_post_ID</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$status</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_status</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	do_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_id_not_found'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$comment_post_ID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>comments_open<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comment_post_ID</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	do_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_closed'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$comment_post_ID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//## wp_die( __('Sorry, comments are closed for this item.') );</span>
	<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Sorry, comments are closed for this item.'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//^^</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$status</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_status</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'draft'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'pending'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	do_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_on_draft'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$comment_post_ID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	do_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pre_comment_on_post'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$comment_post_ID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$comment_author</span>       <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'author'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>  ? <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'author'</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; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$comment_author_email</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>   ? <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</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;">null</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$comment_author_url</span>   <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>     ? <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'url'</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;">null</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$comment_content</span>      <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'comment'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> ? <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'comment'</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;">null</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// If the user is logged in</span>
<span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> wp_get_current_user<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_name</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_name</span><span style="color: #339933;">=</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">user_login</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$comment_author</span>       <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$comment_author_email</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">user_email</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$comment_author_url</span>   <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">user_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> current_user_can<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'unfiltered_html'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> wp_create_nonce<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'unfiltered-html-comment_'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$comment_post_ID</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'_wp_unfiltered_html_comment'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			kses_remove_filters<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// start with a clean slate</span>
			kses_init_filters<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// set up the filters</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_registration'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">'private'</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$status</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_status</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #666666; font-style: italic;">//## wp_die( __('Sorry, you must be logged in to post a comment.') );</span>
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Sorry, you must be logged in to post a comment.'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//^^</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$comment_type</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'require_name_email'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">6</span> <span style="color: #339933;">&gt;</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comment_author_email</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$comment_author</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #666666; font-style: italic;">//## wp_die( __('Error: please fill the required fields (name, email).') );</span>
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error: please fill the required fields (name, email).'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//^^</span>
	<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>is_email<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comment_author_email</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #666666; font-style: italic;">//## wp_die( __('Error: please enter a valid email address.') );</span>
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error: please enter a valid email address.'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//^^</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$comment_content</span> <span style="color: #009900;">&#41;</span>
	<span style="color: #666666; font-style: italic;">//## wp_die( __('Error: please type a comment.') );</span>
	<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error: please type a comment.'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//^^</span>
&nbsp;
<span style="color: #000088;">$comment_parent</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'comment_parent'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? absint<span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'comment_parent'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$commentdata</span> <span style="color: #339933;">=</span> <span style="color: #990000;">compact</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_post_ID'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'comment_author'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'comment_author_email'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'comment_author_url'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'comment_content'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'comment_type'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'comment_parent'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user_ID'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$comment_id</span> <span style="color: #339933;">=</span> wp_new_comment<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$commentdata</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$comment</span> <span style="color: #339933;">=</span> get_comment<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comment_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$comment_cookie_lifetime</span> <span style="color: #339933;">=</span> apply_filters<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_cookie_lifetime'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">30000000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">setcookie</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_author_'</span> <span style="color: #339933;">.</span> COOKIEHASH<span style="color: #339933;">,</span> <span style="color: #000088;">$comment</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_author</span><span style="color: #339933;">,</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$comment_cookie_lifetime</span><span style="color: #339933;">,</span> COOKIEPATH<span style="color: #339933;">,</span> COOKIE_DOMAIN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">setcookie</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_author_email_'</span> <span style="color: #339933;">.</span> COOKIEHASH<span style="color: #339933;">,</span> <span style="color: #000088;">$comment</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_author_email</span><span style="color: #339933;">,</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$comment_cookie_lifetime</span><span style="color: #339933;">,</span> COOKIEPATH<span style="color: #339933;">,</span> COOKIE_DOMAIN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">setcookie</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_author_url_'</span> <span style="color: #339933;">.</span> COOKIEHASH<span style="color: #339933;">,</span> esc_url<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comment</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_author_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$comment_cookie_lifetime</span><span style="color: #339933;">,</span> COOKIEPATH<span style="color: #339933;">,</span> COOKIE_DOMAIN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//##</span>
<span style="color: #666666; font-style: italic;">// $location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;</span>
<span style="color: #666666; font-style: italic;">// $location = apply_filters('comment_post_redirect', $location, $comment);</span>
<span style="color: #666666; font-style: italic;">// wp_redirect($location);</span>
<span style="color: #000088;">$comment</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_content</span> <span style="color: #339933;">=</span> apply_filters<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_text'</span><span style="color: #339933;">,</span><span style="color: #000088;">$comment</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$comment</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_date</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'l, j. F Y G:i'</span><span style="color: #339933;">,</span><span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comment</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment_date</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comment</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//^^</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**-----------------------------------------------------------------------------
 *	end	/wp-comments-post.php
 */</span></pre></td></tr></table></div>

<p>Jetzt da ich eine Datei habe, die meine AJAX-Anfrage verarbeiten und beantworten kann, kann ich das zugehörige Javascript basteln. Ein <code>div</code> wird beim Formular eingefügt um den Ladestatus oder eine Fehlermeldung anzuzeigen. Der Rest ist ein simpler <code><a href="http://docs.jquery.com/Ajax/jQuery.ajax">jQuery.ajax()</a></code>-Aufruf, der beim <code>success</code>-Event den zurückgelieferten Text als Fehlermeldung in besagtem <code>div</code> anzeigt oder, sollte der Text mit einem <code>{</code> beginnen, ihn als JSON-Objekt des neuen Kommentars behandelt. Aus den Kommentardaten lasse ich ein HTML-Konstrukt erstellen, das dem Kommentarlisteneintrag meines Templates entspricht, und füge es in dann in die Liste ein. Sollte es auf der Seite noch keine Kommentare geben, wird der gesamte notwendige Bereich mitsamt Überschrift erstellt und eingefügt. Den HTML-Teil und das Einreihen in das DOM sollte man natürlich an sein jeweiliges Theme anpassen. Bei mir sieht das dann so aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// ajax comments</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#commentform'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> ac <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
			form<span style="color: #339933;">:</span> jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#commentform'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			response<span style="color: #339933;">:</span> jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;div id=&quot;response&quot; /&gt;'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		ac.<span style="color: #660066;">form</span>.<span style="color: #660066;">before</span><span style="color: #009900;">&#40;</span>ac.<span style="color: #660066;">response</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">submit</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			jQuery.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
				type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'POST'</span><span style="color: #339933;">,</span>
				url<span style="color: #339933;">:</span> TPLDIR<span style="color: #339933;">+</span><span style="color: #3366CC;">'ajax/new-comment.php'</span><span style="color: #339933;">,</span>
				dataType<span style="color: #339933;">:</span> <span style="color: #3366CC;">'text'</span><span style="color: #339933;">,</span>
				data<span style="color: #339933;">:</span> ac.<span style="color: #660066;">form</span>.<span style="color: #660066;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
				beforeSend<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					ac.<span style="color: #660066;">response</span>.<span style="color: #660066;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'error success'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'loading'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideDown</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
				success<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>r<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> r.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span><span style="color: #3366CC;">'{'</span> <span style="color: #009900;">&#41;</span>
						ac.<span style="color: #660066;">response</span>.<span style="color: #660066;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'loading'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'error'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>r<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
						ac.<span style="color: #660066;">form</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'textarea'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>
						ac.<span style="color: #660066;">response</span>.<span style="color: #660066;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'loading'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'success'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Dein Kommentar wurde erfolgreich eingetragen.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						c <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">eval</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'('</span><span style="color: #339933;">+</span>r<span style="color: #339933;">+</span><span style="color: #3366CC;">')'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #003366; font-weight: bold;">var</span> comment_count <span style="color: #339933;">=</span> jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ol.commentlist li'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
						<span style="color: #003366; font-weight: bold;">var</span> comment_html <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;li id=&quot;comment-'</span><span style="color: #339933;">+</span>c.<span style="color: #660066;">comment_ID</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&quot; class=&quot;comment'</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>c.<span style="color: #660066;">user_id</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #3366CC;">' user'</span><span style="color: #339933;">:</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>comment_count<span style="color: #339933;">==</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #3366CC;">' first'</span><span style="color: #339933;">:</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&quot;&gt;'</span>
							<span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;div class=&quot;comment-count&quot;&gt;'</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>parseInt<span style="color: #009900;">&#40;</span>comment_count<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/div&gt;'</span>
							<span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;div class=&quot;comment-author&quot;&gt;'</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>c.<span style="color: #660066;">comment_author_url</span><span style="color: #339933;">!=</span><span style="color: #3366CC;">''</span><span style="color: #339933;">?</span><span style="color: #3366CC;">'&lt;a href=&quot;'</span><span style="color: #339933;">+</span>c.<span style="color: #660066;">comment_author_url</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&quot;&gt;'</span><span style="color: #339933;">+</span>c.<span style="color: #660066;">comment_author</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/a&gt;'</span><span style="color: #339933;">:</span>c.<span style="color: #660066;">comment_author</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/div&gt;'</span>
							<span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;div class=&quot;comment-date&quot; title=&quot;'</span><span style="color: #339933;">+</span>c.<span style="color: #660066;">comment_date</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&quot;&gt;vor einer Sekunde'</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>c.<span style="color: #660066;">comment_approved</span><span style="color: #339933;">==</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #3366CC;">' (noch nicht freigeschaltet)'</span><span style="color: #339933;">:</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/div&gt;'</span>
							<span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;div class=&quot;entry&quot;&gt;'</span><span style="color: #339933;">+</span>c.<span style="color: #660066;">comment_content</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/div&gt;'</span>
							<span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/li&gt;'</span><span style="color: #339933;">;</span>
						<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> comment_count <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span>
							jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;div class=&quot;comments&quot;&gt;&lt;h3 class=&quot;post-title&quot;&gt;Bisher eine Reaktion&lt;/h3&gt;&lt;ol class=&quot;commentlist&quot;&gt;'</span><span style="color: #339933;">+</span>comment_html<span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/ol&gt;&lt;/div&gt;'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">insertBefore</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#respond'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideDown</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'medium'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
							jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#comments h3'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Bisher '</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>parseInt<span style="color: #009900;">&#40;</span>comment_count<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">' Reaktionen'</span><span style="color: #009900;">&#41;</span>
							jQuery<span style="color: #009900;">&#40;</span>comment_html<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">appendTo</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ol.commentlist'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideDown</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'medium'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #009900;">&#125;</span>
					<span style="color: #009900;">&#125;</span>
					jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#submit'</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">blur</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
				error<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>XMLHttpRequest<span style="color: #339933;">,</span> textStatus<span style="color: #339933;">,</span> errorThrown<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					ac.<span style="color: #660066;">response</span>.<span style="color: #660066;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'loading'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'error'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Fehler: Die AJAX-Anfrage ist fehlgeschlagen (&quot;</span><span style="color: #339933;">+</span>textStatus<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#submit'</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">blur</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</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: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Damit alles noch akzeptabel aussieht, braucht es noch eine Loading-Animation, die ich mir bei <a href="http://www.ajaxload.info">Ajaxload.info</a> erstelle, und eine Priese CSS:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*----- ajax comments -----*/</span>
&nbsp;
<span style="color: #cc00cc;">#response</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">3em</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#response</span><span style="color: #6666ff;">.loading</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">transparent</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'images/loading.gif'</span><span style="color: #00AA00;">&#41;</span> <span style="color: #000000; font-weight: bold;">top</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #993333;">no-repeat</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#response</span><span style="color: #6666ff;">.success</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#222222</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#response</span><span style="color: #6666ff;">.error</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#aa1010</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<h4>Fertig.</h4>
<p>Die Kommentare werden nun per AJAX eingetragen, es werden Ladestatus, Fehler- bzw. Erfolgsmeldungen am Formular angezeigt und das neue Kommentar wird direkt in die Kommentarliste eingefügt. Verschachtelte Kommentare habe ich in diesem Skript nicht beachtet, da ich sie bisher nicht nutze. Da aber im JSON-Objekt des Kommentars auch die ID des Elternkommentars enthalten ist, dürfte es ein Leichtes sein, die entsprechende Stelle im DOM zu finden und es dort einzufügen.</p>
]]></content:encoded>
			<wfw:commentRss>http://simbo.de/blog/2009/12/ajax-kommentare/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Nützliche Konstanten für Wordpress Templates und Plugins</title>
		<link>http://simbo.de/blog/2009/12/nutzliche-konstanten-fur-wordpress-templates-und-plugins/</link>
		<comments>http://simbo.de/blog/2009/12/nutzliche-konstanten-fur-wordpress-templates-und-plugins/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 17:20:52 +0000</pubDate>
		<dc:creator>Simbo</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin Entwicklung]]></category>
		<category><![CDATA[Theme Entwicklung]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://simbo.de/site/?p=160</guid>
		<description><![CDATA[Für wiederholt in Templatedateien und Pluginscripts verwendete Variablen und Funktionen mit konstanten Rückgabewerten lohnt es sich, in der functions.php Konstanten anzulegen und diese stattdessen zu verwenden. Das spart nicht nur Tipparbeit sondern verbessert auch die Performance.

Ich verwende meist folgenden Code-Block als Vorlage:

1
2
3
4
5
6
7
8
define&#40;'HOME', get_option&#40;'home'&#41;.'/' &#41;;
define&#40;'NAME', get_bloginfo&#40;'name'&#41; &#41;;
define&#40;'TPLPATH', ABSPATH.'wp-content/themes/'.get_option&#40;'template'&#41;.'/' &#41;;
define&#40;'TPLDIR', get_bloginfo&#40;'template_directory'&#41;.'/' &#41;;
define&#40;'IMGDIR', TPLDIR.'images/' &#41;;
define&#40;'UPLOADDIR', get_option&#40;'upload_url_path'&#41;.'/' &#41;;
define&#40;'TAGURL', HOME.get_option&#40;'tag_base'&#41;.'/' [...]]]></description>
			<content:encoded><![CDATA[<p>Für wiederholt in Templatedateien und Pluginscripts verwendete Variablen und Funktionen mit konstanten Rückgabewerten lohnt es sich, in der <code>functions.php</code> Konstanten anzulegen und diese stattdessen zu verwenden. Das spart nicht nur Tipparbeit sondern verbessert auch die Performance.</p>
<p><span id="more-160"></span></p>
<p>Ich verwende meist folgenden Code-Block als Vorlage:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HOME'</span><span style="color: #339933;">,</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'NAME'</span><span style="color: #339933;">,</span> get_bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'TPLPATH'</span><span style="color: #339933;">,</span> ABSPATH<span style="color: #339933;">.</span><span style="color: #0000ff;">'wp-content/themes/'</span><span style="color: #339933;">.</span>get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'TPLDIR'</span><span style="color: #339933;">,</span> get_bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_directory'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'IMGDIR'</span><span style="color: #339933;">,</span> TPLDIR<span style="color: #339933;">.</span><span style="color: #0000ff;">'images/'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'UPLOADDIR'</span><span style="color: #339933;">,</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'upload_url_path'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'TAGURL'</span><span style="color: #339933;">,</span> HOME<span style="color: #339933;">.</span>get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tag_base'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CATURL'</span><span style="color: #339933;">,</span> HOME<span style="color: #339933;">.</span>get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'category_base'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://simbo.de/blog/2009/12/nutzliche-konstanten-fur-wordpress-templates-und-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

