<?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>wpGrafie.de</title>
	<atom:link href="http://wpgrafie.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://wpgrafie.de</link>
	<description>Kunst und Technik hinter WordPress für jeden erklärt.</description>
	<lastBuildDate>Sat, 14 Apr 2012 20:43:22 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-beta4-20825</generator>
		<item>
		<title>Codeschnipsel: Gist-Schnipsel von Github in WordPress einbinden</title>
		<link>http://wpgrafie.de/schnipsel/gist-wordpress-einbinden/</link>
		<comments>http://wpgrafie.de/schnipsel/gist-wordpress-einbinden/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 00:27:02 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
		
		<guid isPermaLink="false">http://wpgrafie.de/?post_type=schnipsel&#038;p=577</guid>
		<description><![CDATA[In letzter Zeit wurde ich immer häufiger gefragt, wie ich denn die Codeschnipsel in meine Erklärungen hier einbinde. Folgend des Rätsels Lösung. Das Konzept Zunächst werden die Codeschnipsel als Gist auf github.com ausgelagert. Um diese in den Beiträgen einbinden zu können, müssen die Schnipsel von Github in WordPress importiert werden. Im Backend soll dafür ein [...]]]></description>
			<content:encoded><![CDATA[<p itemprop="description">In letzter Zeit wurde ich immer häufiger gefragt, wie ich denn die Codeschnipsel in meine Erklärungen hier einbinde. Folgend des Rätsels Lösung.</p>
<p><img src="http://wpgrafie.de/files/2012/01/wordpress-gist2wp.png" alt="wordpress-gist2wp" title="wordpress-gist2wp" width="574" height="352" class="aligncenter size-full wp-image-578" /></p>
<h3>Das Konzept</h3>
<p>Zunächst werden die Codeschnipsel als <strong>Gist</strong> auf <a href="http://gist.gihub.com">github.com</a> ausgelagert.<br />
Um diese in den Beiträgen einbinden zu können, müssen die Schnipsel von <strong>Github in WordPress</strong> importiert werden.</p>
<p>Im Backend soll dafür ein <strong>Eingabefeld</strong> für die Gist-ID angelegt werden, welches die Gist-Daten in ein benutzerdefiniertes Feld per AJAX lädt.<br />
Die Dateinamen sollen dann an die gewünschte Stelle eingesetzt werden und im Frontend umgewandelt werden.</p>
<h3>Die Umsetzung</h3>
<h4>Metabox</h4>
<p>Zunächst die benötigte Metabox für das Backend. Im Eingabefeld wird die Gist-ID eingefügt bzw. aus der Datenbank geladen. Per Button werden die Daten von Github in die Datenbank als benutzerdefinierte Felder gespeichert. Die Dateinamen werden als Liste im Format <code>{Dateiname}</code> ausgegeben.</p>
<p><div class="gist-syntax"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span></div><div class='line' id='LC2'><span class="cm">/*</span></div><div class='line' id='LC3'><span class="cm"> * Add a metabox the post edit screen with an input field for the gist ID</span></div><div class='line' id='LC4'><span class="cm"> * and show the file list.</span></div><div class='line' id='LC5'><span class="cm"> */</span></div><div class='line' id='LC6'><span class="k">function</span> <span class="nf">ds_gist_metabox_cb</span><span class="p">(</span> <span class="nv">$data</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC7'>	<span class="nx">wp_nonce_field</span><span class="p">(</span> <span class="s1">&#39;ds_gist&#39;</span><span class="p">,</span> <span class="s1">&#39;ds-gist-nonce&#39;</span> <span class="p">);</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'>	<span class="nv">$gist_id</span>   <span class="o">=</span> <span class="nx">get_post_meta</span><span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">ID</span><span class="p">,</span> <span class="s1">&#39;_gist_id&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">)</span> <span class="p">;</span></div><div class='line' id='LC10'>	<span class="nv">$gist_id</span>   <span class="o">=</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_id</span> <span class="p">)</span> <span class="o">?</span> <span class="nv">$gist_id</span> <span class="o">:</span> <span class="s1">&#39;&#39;</span><span class="p">;</span></div><div class='line' id='LC11'>	<span class="nv">$gist_data</span> <span class="o">=</span> <span class="nx">get_post_meta</span><span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">ID</span><span class="p">,</span> <span class="s1">&#39;_gist_data&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">);</span></div><div class='line' id='LC12'>	<span class="nv">$gist_data</span> <span class="o">=</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_data</span> <span class="p">)</span> <span class="o">?</span> <span class="nv">$gist_data</span> <span class="o">:</span> <span class="k">array</span><span class="p">();</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'>	<span class="nv">$files</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span></div><div class='line' id='LC15'>	<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_data</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC16'>		<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$gist_data</span> <span class="k">as</span> <span class="nv">$file</span> <span class="o">=&gt;</span> <span class="nv">$data</span> <span class="p">)</span></div><div class='line' id='LC17'>			<span class="nv">$files</span> <span class="o">.=</span> <span class="s1">&#39;&lt;li&gt;&lt;code&gt;{&#39;</span> <span class="o">.</span> <span class="nv">$file</span> <span class="o">.</span> <span class="s1">&#39;}&lt;/code&gt;&lt;/li&gt;&#39;</span><span class="p">;</span></div><div class='line' id='LC18'>	<span class="p">}</span></div><div class='line' id='LC19'>	<span class="cp">?&gt;</span><span class="x"></span></div><div class='line' id='LC20'><span class="x">	&lt;p&gt;</span></div><div class='line' id='LC21'><span class="x">		&lt;label&gt;Gist ID: &lt;input type=&quot;text&quot; class=&quot;small-text&quot; style=&quot;width: 180px;&quot; name=&quot;gist-id&quot; id=&quot;gist-id&quot; value=&quot;</span><span class="cp">&lt;?php</span> <span class="k">echo</span> <span class="nx">esc_attr</span><span class="p">(</span> <span class="nv">$gist_id</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&quot; /&gt;&lt;/label&gt;</span></div><div class='line' id='LC22'><span class="x">		&lt;input type=&quot;button&quot; value=&quot;Fetch&quot; id=&quot;gist-update&quot; class=&quot;button&quot; /&gt;</span></div><div class='line' id='LC23'><span class="x">		&lt;img src=&quot;</span><span class="cp">&lt;?php</span> <span class="k">echo</span> <span class="nx">esc_url</span><span class="p">(</span> <span class="nx">admin_url</span><span class="p">(</span> <span class="s1">&#39;images/wpspin_light.gif&#39;</span> <span class="p">)</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&quot; class=&quot;ajax-loading&quot; id=&quot;gist-ajax-loading&quot; alt=&quot;&quot; /&gt;</span></div><div class='line' id='LC24'><span class="x">	&lt;/p&gt;</span></div><div class='line' id='LC25'><span class="x">	&lt;ul id=&quot;gist-files&quot;&gt;</span></div><div class='line' id='LC26'><span class="x">		</span><span class="cp">&lt;?php</span> <span class="k">echo</span> <span class="nv">$files</span><span class="p">;</span><span class="cp">?&gt;</span><span class="x"></span></div><div class='line' id='LC27'><span class="x">	&lt;/ul&gt;</span></div><div class='line' id='LC28'><span class="x">	</span><span class="cp">&lt;?php</span></div><div class='line' id='LC29'><span class="p">}</span></div></pre></div><div class="cf"><p class="gist-meta"><a href="https://gist.github.com/raw/1580098/h_ds_gist_metabox_cb.php">RAW</a> · <a class="gist-download" href="https://gist.github.com/gists/1580098/download">Download</a> · <a href="https://gist.github.com/1580098">Gist@GitHub</a></p></div></p>
<h4>AJAX Callback</h4>
<p>Der AJAX Callback dient dazu, die Codeschnipsel in die lokale Datenbank zu übertragen. Dafür kann auf die <a href="http://develop.github.com/p/gist.html">Gist API</a> von Github gesetzt werden.<br />
Der Callback übernimmt auch das Umformen der empfangen Daten, denn die Gist API gibt mehrere Dateien leider nur als einen String zurück. Dadurch wird es erst möglich, die Schnipsel mit <code>{Dateiname}</code> einzubinden.<br />
Gespeichert werden die Daten als benutzerdefinierte Felder unter den Namen <code>_gist_id</code> bzw. <code>_gist_data</code>.</p>
<p><div class="gist-syntax"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span></div><div class='line' id='LC2'><span class="cm">/*</span></div><div class='line' id='LC3'><span class="cm"> * Replace {Filename} with associated snippet from the</span></div><div class='line' id='LC4'><span class="cm"> * custom fields. </span></div><div class='line' id='LC5'><span class="cm"> */</span></div><div class='line' id='LC6'><span class="k">function</span> <span class="nf">ds_gistify</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC7'>	<span class="nv">$post_id</span> <span class="o">=</span> <span class="nb">intval</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;post_id&#39;</span><span class="p">]</span> <span class="p">);</span></div><div class='line' id='LC8'>	<span class="nv">$gist_id</span> <span class="o">=</span> <span class="nx">sanitize_key</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;gist_id&#39;</span><span class="p">]</span> <span class="p">);</span></div><div class='line' id='LC9'>	<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$post_id</span> <span class="p">)</span> <span class="o">||</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_id</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC10'>		<span class="k">die</span><span class="p">(</span> <span class="nb">json_encode</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC11'>			<span class="s1">&#39;id&#39;</span>    <span class="o">=&gt;</span> <span class="nv">$gist_id</span><span class="p">,</span></div><div class='line' id='LC12'>			<span class="s1">&#39;error&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Empty Post ID or Gist ID.&#39;</span></div><div class='line' id='LC13'>		<span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'>	<span class="nx">check_ajax_referer</span><span class="p">(</span> <span class="s1">&#39;ds_gist&#39;</span> <span class="p">);</span></div><div class='line' id='LC16'><br/></div><div class='line' id='LC17'>	<span class="nv">$gist_body</span> <span class="o">=</span> <span class="nx">wp_remote_retrieve_body</span><span class="p">(</span></div><div class='line' id='LC18'>		<span class="nx">wp_remote_get</span><span class="p">(</span></div><div class='line' id='LC19'>				<span class="nv">$gist_url</span> <span class="o">=</span> <span class="nb">sprintf</span><span class="p">(</span> <span class="s2">&quot;https://gist.github.com/%s.json&quot;</span><span class="p">,</span> <span class="nv">$gist_id</span> <span class="p">)</span></div><div class='line' id='LC20'>		<span class="p">)</span></div><div class='line' id='LC21'>	<span class="p">);</span></div><div class='line' id='LC22'>	<span class="nv">$gist_body</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span> <span class="nv">$gist_body</span> <span class="p">);</span></div><div class='line' id='LC23'><br/></div><div class='line' id='LC24'>	<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_body</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC25'>		<span class="k">die</span><span class="p">(</span> <span class="nb">json_encode</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC26'>			<span class="s1">&#39;id&#39;</span>    <span class="o">=&gt;</span> <span class="nv">$gist_id</span><span class="p">,</span></div><div class='line' id='LC27'>			<span class="s1">&#39;error&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Empty Body&#39;</span></div><div class='line' id='LC28'>		<span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC29'><br/></div><div class='line' id='LC30'>	<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_body</span><span class="o">-&gt;</span><span class="na">error</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC31'>		<span class="k">die</span><span class="p">(</span> <span class="nb">json_encode</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC32'>			<span class="s1">&#39;id&#39;</span>    <span class="o">=&gt;</span> <span class="nv">$gist_id</span><span class="p">,</span></div><div class='line' id='LC33'>			<span class="s1">&#39;error&#39;</span> <span class="o">=&gt;</span> <span class="nv">$gist_body</span><span class="o">-&gt;</span><span class="na">error</span></div><div class='line' id='LC34'>		<span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC35'>	<span class="p">}</span></div><div class='line' id='LC36'><br/></div><div class='line' id='LC37'>	<span class="nx">update_post_meta</span><span class="p">(</span> <span class="nv">$post_id</span><span class="p">,</span> <span class="s1">&#39;_gist_id&#39;</span><span class="p">,</span> <span class="nv">$gist_id</span> <span class="p">);</span></div><div class='line' id='LC38'><br/></div><div class='line' id='LC39'>	<span class="nv">$gist_files</span> <span class="o">=</span> <span class="nv">$gist_body</span><span class="o">-&gt;</span><span class="na">files</span><span class="p">;</span></div><div class='line' id='LC40'><br/></div><div class='line' id='LC41'>	<span class="nb">preg_match_all</span><span class="p">(</span> <span class="s1">&#39;/&lt;pre&gt;(.+?)&lt;/pre&gt;/is&#39;</span><span class="p">,</span> <span class="nv">$gist_body</span><span class="o">-&gt;</span><span class="na">div</span><span class="p">,</span> <span class="nv">$gist_divs</span> <span class="p">);</span></div><div class='line' id='LC42'>	<span class="nv">$gist_divs</span> <span class="o">=</span> <span class="nv">$gist_divs</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span></div><div class='line' id='LC43'><br/></div><div class='line' id='LC44'>	<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$gist_files</span> <span class="k">as</span> <span class="nv">$i</span> <span class="o">=&gt;</span> <span class="nv">$gist_file</span> <span class="p">)</span></div><div class='line' id='LC45'>		<span class="nv">$gist_data</span><span class="p">[</span> <span class="nv">$gist_file</span> <span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;&lt;div class=&quot;gist-syntax&quot;&gt;&#39;</span> <span class="o">.</span> <span class="nv">$gist_divs</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">.</span> <span class="s1">&#39;&lt;/div&gt;&#39;</span><span class="p">;</span></div><div class='line' id='LC46'><br/></div><div class='line' id='LC47'>	<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$gist_data</span> <span class="k">as</span> <span class="nv">$file</span> <span class="o">=&gt;</span> <span class="nv">$gist_item</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC48'>		<span class="nv">$gist_new_meta</span> <span class="o">=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC49'>			<span class="s1">&#39;&lt;div&gt;&lt;p class=&quot;gist-meta&quot;&gt;&lt;a class=&quot;gist-raw&quot; href=&quot;%s&quot;&gt;RAW&lt;/a&gt; · &lt;a class=&quot;gist-download&quot; href=&quot;%s&quot;&gt;Download&lt;/a&gt; · &lt;a class=&quot;gist-github&quot; href=&quot;%s&quot;&gt;Gist@GitHub&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC50'>			<span class="nx">esc_url</span><span class="p">(</span> <span class="s2">&quot;https://gist.github.com/raw/</span><span class="si">{</span><span class="nv">$gist_id</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="nv">$file</span><span class="si">}</span><span class="s2">&quot;</span> <span class="p">),</span></div><div class='line' id='LC51'>			<span class="nx">esc_url</span><span class="p">(</span> <span class="s2">&quot;https://gist.github.com/gists/</span><span class="si">{</span><span class="nv">$gist_id</span><span class="si">}</span><span class="s2">/download&quot;</span><span class="p">),</span></div><div class='line' id='LC52'>			<span class="nx">esc_url</span><span class="p">(</span> <span class="s2">&quot;https://gist.github.com/</span><span class="si">{</span><span class="nv">$gist_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div><div class='line' id='LC53'>		<span class="p">);</span></div><div class='line' id='LC54'>		<span class="nv">$gist_data</span><span class="p">[</span> <span class="nv">$file</span> <span class="p">]</span> <span class="o">.=</span> <span class="nv">$gist_new_meta</span><span class="p">;</span></div><div class='line' id='LC55'>	<span class="p">}</span></div><div class='line' id='LC56'><br/></div><div class='line' id='LC57'>	<span class="nx">update_post_meta</span><span class="p">(</span> <span class="nv">$post_id</span><span class="p">,</span> <span class="s1">&#39;_gist_data&#39;</span><span class="p">,</span> <span class="nv">$gist_data</span> <span class="p">);</span></div><div class='line' id='LC58'><br/></div><div class='line' id='LC59'>	<span class="k">die</span><span class="p">(</span> <span class="nb">json_encode</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC60'>		<span class="s1">&#39;id&#39;</span>    <span class="o">=&gt;</span> <span class="nv">$gist_id</span><span class="p">,</span></div><div class='line' id='LC61'>		<span class="s1">&#39;files&#39;</span> <span class="o">=&gt;</span> <span class="nv">$gist_files</span></div><div class='line' id='LC62'>	<span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC63'><span class="p">}</span></div></pre></div><div class="cf"><p class="gist-meta"><a href="https://gist.github.com/raw/1580098/h_ds_gistify.php">RAW</a> · <a class="gist-download" href="https://gist.github.com/gists/1580098/download">Download</a> · <a href="https://gist.github.com/1580098">Gist@GitHub</a></p></div></p>
<h4>jQuery Handler</h4>
<p>Der AJAX Callback wird mit Hilfe der Javascript Bibliothek jQuery ausgeführt. Beim Klick des Buttons beginnt die Ausführung.</p>
<p><div class="gist-syntax"><pre><div class='line' id='LC1'><span class="c1">// Handle AJAX call</span></div><div class='line' id='LC2'><span class="p">(</span> <span class="kd">function</span><span class="p">(</span> <span class="nx">$</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC3'>	<span class="nx">$</span><span class="p">(</span> <span class="s1">&#39;#gist-update&#39;</span> <span class="p">).</span><span class="nx">click</span><span class="p">(</span> <span class="kd">function</span><span class="p">(</span> <span class="nx">e</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC4'>		<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span></div><div class='line' id='LC5'><br/></div><div class='line' id='LC6'>		<span class="nx">$</span><span class="p">(</span> <span class="s1">&#39;#gist-ajax-loading&#39;</span> <span class="p">).</span><span class="nx">css</span><span class="p">(</span> <span class="s1">&#39;visibility&#39;</span><span class="p">,</span> <span class="s1">&#39;visible&#39;</span> <span class="p">);</span></div><div class='line' id='LC7'><br/></div><div class='line' id='LC8'>		<span class="nx">data</span> <span class="o">=</span> <span class="p">{</span></div><div class='line' id='LC9'>			<span class="s1">&#39;action&#39;</span> <span class="o">:</span> <span class="s1">&#39;gist&#39;</span><span class="p">,</span></div><div class='line' id='LC10'>			<span class="s1">&#39;_ajax_nonce&#39;</span> <span class="o">:</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#ds-gist-nonce&#39;</span><span class="p">).</span><span class="nx">val</span><span class="p">(),</span></div><div class='line' id='LC11'>			<span class="s1">&#39;post_id&#39;</span> <span class="o">:</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#post_ID&#39;</span><span class="p">).</span><span class="nx">val</span><span class="p">(),</span></div><div class='line' id='LC12'>			<span class="s1">&#39;gist_id&#39;</span> <span class="o">:</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#gist-id&#39;</span><span class="p">).</span><span class="nx">val</span><span class="p">()</span></div><div class='line' id='LC13'>		<span class="p">};</span></div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'>		<span class="nx">$</span><span class="p">.</span><span class="nx">post</span><span class="p">(</span> <span class="nx">ajaxurl</span><span class="p">,</span> <span class="nx">data</span><span class="p">,</span></div><div class='line' id='LC16'>			<span class="kd">function</span><span class="p">(</span> <span class="nx">res</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC17'>				<span class="nx">res</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">parseJSON</span><span class="p">(</span> <span class="nx">res</span> <span class="p">);</span></div><div class='line' id='LC18'><br/></div><div class='line' id='LC19'>				<span class="k">if</span> <span class="p">(</span> <span class="nx">res</span><span class="p">.</span><span class="nx">error</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC20'>					<span class="nx">$</span><span class="p">(</span> <span class="s1">&#39;#gist-ajax-loading&#39;</span> <span class="p">).</span><span class="nx">css</span><span class="p">(</span> <span class="s1">&#39;visibility&#39;</span><span class="p">,</span> <span class="s1">&#39;hidden&#39;</span> <span class="p">);</span></div><div class='line' id='LC21'>					<span class="nx">alert</span><span class="p">(</span> <span class="s1">&#39;Gist ID &quot;&#39;</span> <span class="o">+</span> <span class="nx">res</span><span class="p">.</span><span class="nx">id</span> <span class="o">+</span> <span class="s1">&#39;&quot;: &#39;</span> <span class="o">+</span> <span class="nx">res</span><span class="p">.</span><span class="nx">error</span> <span class="p">);</span></div><div class='line' id='LC22'>					<span class="k">return</span><span class="p">;</span></div><div class='line' id='LC23'>				<span class="p">}</span></div><div class='line' id='LC24'><br/></div><div class='line' id='LC25'>				<span class="k">if</span> <span class="p">(</span> <span class="nx">res</span><span class="p">.</span><span class="nx">files</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC26'>					<span class="nx">$</span><span class="p">(</span> <span class="s1">&#39;#gist-files&#39;</span> <span class="p">).</span><span class="nx">empty</span><span class="p">();</span></div><div class='line' id='LC27'>					<span class="nx">$</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span> <span class="nx">res</span><span class="p">.</span><span class="nx">files</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC28'>						<span class="nx">$</span><span class="p">(</span> <span class="s1">&#39;#gist-files&#39;</span> <span class="p">).</span><span class="nx">append</span><span class="p">(</span> <span class="s1">&#39;&lt;li&gt;&lt;code&gt;{&#39;</span> <span class="o">+</span> <span class="nx">val</span> <span class="o">+</span> <span class="s1">&#39;}&lt;/code&gt;&lt;/li&gt;&#39;</span> <span class="p">);</span></div><div class='line' id='LC29'>					<span class="p">});</span></div><div class='line' id='LC30'>					<span class="nx">$</span><span class="p">(</span> <span class="s1">&#39;#gist-ajax-loading&#39;</span> <span class="p">).</span><span class="nx">css</span><span class="p">(</span> <span class="s1">&#39;visibility&#39;</span><span class="p">,</span> <span class="s1">&#39;hidden&#39;</span> <span class="p">);</span></div><div class='line' id='LC31'>				<span class="p">}</span></div><div class='line' id='LC32'><br/></div><div class='line' id='LC33'>			<span class="p">}</span></div><div class='line' id='LC34'>		<span class="p">)</span></div><div class='line' id='LC35'>	<span class="p">});</span></div><div class='line' id='LC36'><span class="p">}</span> <span class="p">)(</span> <span class="nx">jQuery</span> <span class="p">);</span></div></pre></div><div class="cf"><p class="gist-meta"><a href="https://gist.github.com/raw/1580098/gist.js">RAW</a> · <a class="gist-download" href="https://gist.github.com/gists/1580098/download">Download</a> · <a href="https://gist.github.com/1580098">Gist@GitHub</a></p></div></p>
<h4>Umwandlung im Frontend</h4>
<p>Im eigentlichen Artikel befinden sich die Codeschnipsel noch im Format <code>{Dateiname}</code>. Diese müssen nun mit dem eigentlich Schnipsel aus dem benutzerdefinierten Feld ersetzt werden.</p>
<p><div class="gist-syntax"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span></div><div class='line' id='LC2'><span class="cm">/*</span></div><div class='line' id='LC3'><span class="cm"> * AJAX callback function which handles the API response. Saves the data</span></div><div class='line' id='LC4'><span class="cm"> * into custom fields</span></div><div class='line' id='LC5'><span class="cm"> */</span></div><div class='line' id='LC6'><span class="k">function</span> <span class="nf">ds_convert_to_gist</span><span class="p">(</span> <span class="nv">$content</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC7'>	<span class="nv">$gist_data</span> <span class="o">=</span> <span class="nx">get_post_meta</span><span class="p">(</span> <span class="nx">get_the_ID</span><span class="p">(),</span> <span class="s1">&#39;_gist_data&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">);</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'>	<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_data</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC10'>		<span class="k">return</span> <span class="nv">$content</span><span class="p">;</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>	<span class="nx">wp_enqueue_style</span><span class="p">(</span><span class="s1">&#39;gist-css&#39;</span><span class="p">);</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'>	<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$gist_data</span> <span class="k">as</span> <span class="nv">$file</span> <span class="o">=&gt;</span> <span class="nv">$file_data</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC15'>		<span class="nv">$files</span><span class="p">[]</span> <span class="o">=</span> <span class="s1">&#39;/{&#39;</span> <span class="o">.</span> <span class="nv">$file</span> <span class="o">.</span> <span class="s1">&#39;}/&#39;</span><span class="p">;</span></div><div class='line' id='LC16'>		<span class="nv">$data</span><span class="p">[]</span>  <span class="o">=</span> <span class="nv">$file_data</span><span class="p">;</span></div><div class='line' id='LC17'>	<span class="p">}</span></div><div class='line' id='LC18'><br/></div><div class='line' id='LC19'>	<span class="nv">$content</span> <span class="o">=</span> <span class="nb">preg_replace</span><span class="p">(</span></div><div class='line' id='LC20'>		<span class="nv">$files</span><span class="p">,</span></div><div class='line' id='LC21'>		<span class="nv">$data</span><span class="p">,</span></div><div class='line' id='LC22'>		<span class="nv">$content</span></div><div class='line' id='LC23'>	<span class="p">);</span></div><div class='line' id='LC24'><br/></div><div class='line' id='LC25'>	<span class="k">return</span> <span class="nv">$content</span><span class="p">;</span></div><div class='line' id='LC26'><span class="p">}</span></div></pre></div><div class="cf"><p class="gist-meta"><a href="https://gist.github.com/raw/1580098/h_ds_convert_to_gist.php">RAW</a> · <a class="gist-download" href="https://gist.github.com/gists/1580098/download">Download</a> · <a href="https://gist.github.com/1580098">Gist@GitHub</a></p></div></p>
<h4>Hooks und Skripts</h4>
<p>Die Funktionen müssen jetzt noch in das WordPress System eingebunden werden, außerdem das Gist Stylesheet sowie die benötigte Javascript Datei registriert und eingebunden werden.</p>
<p><div class="gist-syntax"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span></div><div class='line' id='LC2'><span class="cm">/*</span></div><div class='line' id='LC3'><span class="cm"> * Hook into the backend and load scripts and</span></div><div class='line' id='LC4'><span class="cm"> * init metabox.</span></div><div class='line' id='LC5'><span class="cm"> */</span></div><div class='line' id='LC6'><span class="k">function</span> <span class="nf">ds_gist2wordpress_admin</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC7'>		<span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;wp_ajax_gist&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gistify&#39;</span> <span class="p">);</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'>		<span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;admin_print_scripts-post.php&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gist_js&#39;</span> <span class="p">);</span></div><div class='line' id='LC10'>		<span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;admin_print_scripts-post-new.php&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gist_js&#39;</span> <span class="p">);</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>		<span class="nx">wp_register_script</span><span class="p">(</span></div><div class='line' id='LC13'>			<span class="s1">&#39;gist-js&#39;</span><span class="p">,</span></div><div class='line' id='LC14'>			<span class="nx">get_bloginfo</span><span class="p">(</span> <span class="s1">&#39;template_url&#39;</span> <span class="p">)</span> <span class="o">.</span> <span class="s2">&quot;/gist.js&quot;</span><span class="p">,</span> <span class="c1">// Path, needs some update from you</span></div><div class='line' id='LC15'>			<span class="k">array</span><span class="p">(</span> <span class="s1">&#39;jquery&#39;</span> <span class="p">),</span></div><div class='line' id='LC16'>			<span class="mf">0.1</span><span class="p">,</span></div><div class='line' id='LC17'>			<span class="k">true</span></div><div class='line' id='LC18'>		<span class="p">);</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'>		<span class="nx">add_meta_box</span><span class="p">(</span></div><div class='line' id='LC21'>				<span class="s1">&#39;ds_gist&#39;</span><span class="p">,</span></div><div class='line' id='LC22'>				<span class="s1">&#39;Gist&#39;</span><span class="p">,</span></div><div class='line' id='LC23'>				<span class="s1">&#39;ds_gist_metabox_cb&#39;</span><span class="p">,</span></div><div class='line' id='LC24'>				<span class="s1">&#39;post&#39;</span></div><div class='line' id='LC25'>		<span class="p">);</span></div><div class='line' id='LC26'><span class="p">}</span></div><div class='line' id='LC27'><span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;admin_init&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gist2wordpress_admin&#39;</span> <span class="p">);</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'><br/></div><div class='line' id='LC30'><span class="cm">/*</span></div><div class='line' id='LC31'><span class="cm"> * Hook into the frontend and load scripts.</span></div><div class='line' id='LC32'><span class="cm"> */</span></div><div class='line' id='LC33'><span class="k">function</span> <span class="nf">ds_gist2wordpress</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC34'>		<span class="nx">wp_register_style</span><span class="p">(</span></div><div class='line' id='LC35'>			<span class="s1">&#39;gist-css&#39;</span><span class="p">,</span></div><div class='line' id='LC36'>			<span class="s1">&#39;https://gist.github.com/stylesheets/gist/embed.css&#39;</span></div><div class='line' id='LC37'>		<span class="p">);</span></div><div class='line' id='LC38'><br/></div><div class='line' id='LC39'>		<span class="nx">add_filter</span><span class="p">(</span> <span class="s1">&#39;the_content&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_convert_to_gist&#39;</span><span class="p">,</span> <span class="mi">99</span> <span class="p">);</span></div><div class='line' id='LC40'><span class="p">}</span></div><div class='line' id='LC41'><span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;init&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gist2wordpress&#39;</span> <span class="p">);</span></div><div class='line' id='LC42'><br/></div><div class='line' id='LC43'><br/></div><div class='line' id='LC44'><span class="k">function</span> <span class="nf">ds_gist_js</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC45'>	<span class="nx">wp_enqueue_script</span><span class="p">(</span> <span class="s1">&#39;gist-js&#39;</span> <span class="p">);</span></div><div class='line' id='LC46'><span class="p">}</span></div></pre></div><div class="cf"><p class="gist-meta"><a href="https://gist.github.com/raw/1580098/h_ds_gist2wordpress.php">RAW</a> · <a class="gist-download" href="https://gist.github.com/gists/1580098/download">Download</a> · <a href="https://gist.github.com/1580098">Gist@GitHub</a></p></div></p>
<h3>Das Ergebnis</h3>
<p>Zum Schluss nochmal alles zusammen, wie es zum Beispiel in einem Theme oder in einem Plugin aussehen könnte.</p>
<p><div class="gist-syntax"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span></div><div class='line' id='LC2'><span class="cm">/*</span></div><div class='line' id='LC3'><span class="cm"> * Hook into the backend and load scripts and</span></div><div class='line' id='LC4'><span class="cm"> * init metabox.</span></div><div class='line' id='LC5'><span class="cm"> */</span></div><div class='line' id='LC6'><span class="k">function</span> <span class="nf">ds_gist2wordpress_admin</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC7'>		<span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;wp_ajax_gist&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gistify&#39;</span> <span class="p">);</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'>		<span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;admin_print_scripts-post.php&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gist_js&#39;</span> <span class="p">);</span></div><div class='line' id='LC10'>		<span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;admin_print_scripts-post-new.php&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gist_js&#39;</span> <span class="p">);</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>		<span class="nx">wp_register_script</span><span class="p">(</span></div><div class='line' id='LC13'>			<span class="s1">&#39;gist-js&#39;</span><span class="p">,</span></div><div class='line' id='LC14'>			<span class="nx">get_bloginfo</span><span class="p">(</span> <span class="s1">&#39;template_url&#39;</span> <span class="p">)</span> <span class="o">.</span> <span class="s2">&quot;/gist.js&quot;</span><span class="p">,</span></div><div class='line' id='LC15'>			<span class="k">array</span><span class="p">(</span> <span class="s1">&#39;jquery&#39;</span> <span class="p">),</span></div><div class='line' id='LC16'>			<span class="mf">0.1</span><span class="p">,</span></div><div class='line' id='LC17'>			<span class="k">true</span></div><div class='line' id='LC18'>		<span class="p">);</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'>		<span class="nx">add_meta_box</span><span class="p">(</span></div><div class='line' id='LC21'>				<span class="s1">&#39;ds_gist&#39;</span><span class="p">,</span></div><div class='line' id='LC22'>				<span class="s1">&#39;Gist&#39;</span><span class="p">,</span></div><div class='line' id='LC23'>				<span class="s1">&#39;ds_gist_metabox_cb&#39;</span><span class="p">,</span></div><div class='line' id='LC24'>				<span class="s1">&#39;post&#39;</span></div><div class='line' id='LC25'>		<span class="p">);</span></div><div class='line' id='LC26'><span class="p">}</span></div><div class='line' id='LC27'><span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;admin_init&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gist2wordpress_admin&#39;</span> <span class="p">);</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'><span class="cm">/*</span></div><div class='line' id='LC30'><span class="cm"> * Hook into the frontend and load scripts.</span></div><div class='line' id='LC31'><span class="cm"> */</span></div><div class='line' id='LC32'><span class="k">function</span> <span class="nf">ds_gist2wordpress</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC33'>		<span class="nx">wp_register_style</span><span class="p">(</span></div><div class='line' id='LC34'>			<span class="s1">&#39;gist-css&#39;</span><span class="p">,</span></div><div class='line' id='LC35'>			<span class="s1">&#39;https://gist.github.com/stylesheets/gist/embed.css&#39;</span></div><div class='line' id='LC36'>		<span class="p">);</span></div><div class='line' id='LC37'><br/></div><div class='line' id='LC38'>		<span class="nx">add_filter</span><span class="p">(</span> <span class="s1">&#39;the_content&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_convert_to_gist&#39;</span><span class="p">,</span> <span class="mi">99</span> <span class="p">);</span></div><div class='line' id='LC39'><span class="p">}</span></div><div class='line' id='LC40'><span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;init&#39;</span><span class="p">,</span> <span class="s1">&#39;ds_gist2wordpress&#39;</span> <span class="p">);</span></div><div class='line' id='LC41'><br/></div><div class='line' id='LC42'><span class="cm">/*</span></div><div class='line' id='LC43'><span class="cm"> * Helper for enqeueing script</span></div><div class='line' id='LC44'><span class="cm"> */</span></div><div class='line' id='LC45'><span class="k">function</span> <span class="nf">ds_gist_js</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC46'>	<span class="nx">wp_enqueue_script</span><span class="p">(</span> <span class="s1">&#39;gist-js&#39;</span> <span class="p">);</span></div><div class='line' id='LC47'><span class="p">}</span></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'><span class="cm">/*</span></div><div class='line' id='LC50'><span class="cm"> * Add a metabox the post edit screen with an input field for the gist ID</span></div><div class='line' id='LC51'><span class="cm"> * and show the file list.</span></div><div class='line' id='LC52'><span class="cm"> */</span></div><div class='line' id='LC53'><span class="k">function</span> <span class="nf">ds_gist_metabox_cb</span><span class="p">(</span> <span class="nv">$data</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC54'>	<span class="nx">wp_nonce_field</span><span class="p">(</span> <span class="s1">&#39;ds_gist&#39;</span><span class="p">,</span> <span class="s1">&#39;ds-gist-nonce&#39;</span> <span class="p">);</span></div><div class='line' id='LC55'><br/></div><div class='line' id='LC56'>	<span class="nv">$gist_id</span>   <span class="o">=</span> <span class="nx">get_post_meta</span><span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">ID</span><span class="p">,</span> <span class="s1">&#39;_gist_id&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">)</span> <span class="p">;</span></div><div class='line' id='LC57'>	<span class="nv">$gist_id</span>   <span class="o">=</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_id</span> <span class="p">)</span> <span class="o">?</span> <span class="nv">$gist_id</span> <span class="o">:</span> <span class="s1">&#39;&#39;</span><span class="p">;</span></div><div class='line' id='LC58'>	<span class="nv">$gist_data</span> <span class="o">=</span> <span class="nx">get_post_meta</span><span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">ID</span><span class="p">,</span> <span class="s1">&#39;_gist_data&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">);</span></div><div class='line' id='LC59'>	<span class="nv">$gist_data</span> <span class="o">=</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_data</span> <span class="p">)</span> <span class="o">?</span> <span class="nv">$gist_data</span> <span class="o">:</span> <span class="k">array</span><span class="p">();</span></div><div class='line' id='LC60'><br/></div><div class='line' id='LC61'>	<span class="nv">$files</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span></div><div class='line' id='LC62'>	<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_data</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC63'>		<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$gist_data</span> <span class="k">as</span> <span class="nv">$file</span> <span class="o">=&gt;</span> <span class="nv">$data</span> <span class="p">)</span></div><div class='line' id='LC64'>			<span class="nv">$files</span> <span class="o">.=</span> <span class="s1">&#39;&lt;li&gt;&lt;code&gt;{&#39;</span> <span class="o">.</span> <span class="nv">$file</span> <span class="o">.</span> <span class="s1">&#39;}&lt;/code&gt;&lt;/li&gt;&#39;</span><span class="p">;</span></div><div class='line' id='LC65'>	<span class="p">}</span></div><div class='line' id='LC66'>	<span class="cp">?&gt;</span><span class="x"></span></div><div class='line' id='LC67'><span class="x">	&lt;p&gt;</span></div><div class='line' id='LC68'><span class="x">		&lt;label&gt;Gist ID: &lt;input type=&quot;text&quot; class=&quot;small-text&quot; style=&quot;width: 180px;&quot; name=&quot;gist-id&quot; id=&quot;gist-id&quot; value=&quot;</span><span class="cp">&lt;?php</span> <span class="k">echo</span> <span class="nx">esc_attr</span><span class="p">(</span> <span class="nv">$gist_id</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&quot; /&gt;&lt;/label&gt;</span></div><div class='line' id='LC69'><span class="x">		&lt;input type=&quot;button&quot; value=&quot;Fetch&quot; id=&quot;gist-update&quot; class=&quot;button&quot; /&gt;</span></div><div class='line' id='LC70'><span class="x">		&lt;img src=&quot;</span><span class="cp">&lt;?php</span> <span class="k">echo</span> <span class="nx">esc_url</span><span class="p">(</span> <span class="nx">admin_url</span><span class="p">(</span> <span class="s1">&#39;images/wpspin_light.gif&#39;</span> <span class="p">)</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&quot; class=&quot;ajax-loading&quot; id=&quot;gist-ajax-loading&quot; alt=&quot;&quot; /&gt;</span></div><div class='line' id='LC71'><span class="x">	&lt;/p&gt;</span></div><div class='line' id='LC72'><span class="x">	&lt;ul id=&quot;gist-files&quot;&gt;</span></div><div class='line' id='LC73'><span class="x">		</span><span class="cp">&lt;?php</span> <span class="k">echo</span> <span class="nv">$files</span><span class="p">;</span><span class="cp">?&gt;</span><span class="x"></span></div><div class='line' id='LC74'><span class="x">	&lt;/ul&gt;</span></div><div class='line' id='LC75'><span class="x">	</span><span class="cp">&lt;?php</span></div><div class='line' id='LC76'><span class="p">}</span></div><div class='line' id='LC77'><br/></div><div class='line' id='LC78'><span class="cm">/*</span></div><div class='line' id='LC79'><span class="cm"> * Replace {Filename} with associated snippet from the</span></div><div class='line' id='LC80'><span class="cm"> * custom fields. </span></div><div class='line' id='LC81'><span class="cm"> */</span></div><div class='line' id='LC82'><span class="k">function</span> <span class="nf">ds_gistify</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC83'>	<span class="nv">$post_id</span> <span class="o">=</span> <span class="nb">intval</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;post_id&#39;</span><span class="p">]</span> <span class="p">);</span></div><div class='line' id='LC84'>	<span class="nv">$gist_id</span> <span class="o">=</span> <span class="nx">sanitize_key</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;gist_id&#39;</span><span class="p">]</span> <span class="p">);</span></div><div class='line' id='LC85'>	<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$post_id</span> <span class="p">)</span> <span class="o">||</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_id</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC86'>		<span class="k">die</span><span class="p">(</span> <span class="nb">json_encode</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC87'>			<span class="s1">&#39;id&#39;</span>    <span class="o">=&gt;</span> <span class="nv">$gist_id</span><span class="p">,</span></div><div class='line' id='LC88'>			<span class="s1">&#39;error&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Empty Post ID or Gist ID.&#39;</span></div><div class='line' id='LC89'>		<span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC90'><br/></div><div class='line' id='LC91'>	<span class="nx">check_ajax_referer</span><span class="p">(</span> <span class="s1">&#39;ds_gist&#39;</span> <span class="p">);</span></div><div class='line' id='LC92'><br/></div><div class='line' id='LC93'>	<span class="nv">$gist_body</span> <span class="o">=</span> <span class="nx">wp_remote_retrieve_body</span><span class="p">(</span></div><div class='line' id='LC94'>		<span class="nx">wp_remote_get</span><span class="p">(</span></div><div class='line' id='LC95'>				<span class="nv">$gist_url</span> <span class="o">=</span> <span class="nb">sprintf</span><span class="p">(</span> <span class="s2">&quot;https://gist.github.com/%s.json&quot;</span><span class="p">,</span> <span class="nv">$gist_id</span> <span class="p">)</span></div><div class='line' id='LC96'>		<span class="p">)</span></div><div class='line' id='LC97'>	<span class="p">);</span></div><div class='line' id='LC98'>	<span class="nv">$gist_body</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span> <span class="nv">$gist_body</span> <span class="p">);</span></div><div class='line' id='LC99'><br/></div><div class='line' id='LC100'>	<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_body</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC101'>		<span class="k">die</span><span class="p">(</span> <span class="nb">json_encode</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC102'>			<span class="s1">&#39;id&#39;</span>    <span class="o">=&gt;</span> <span class="nv">$gist_id</span><span class="p">,</span></div><div class='line' id='LC103'>			<span class="s1">&#39;error&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Empty Body&#39;</span></div><div class='line' id='LC104'>		<span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC105'><br/></div><div class='line' id='LC106'>	<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_body</span><span class="o">-&gt;</span><span class="na">error</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC107'>		<span class="k">die</span><span class="p">(</span> <span class="nb">json_encode</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC108'>			<span class="s1">&#39;id&#39;</span>    <span class="o">=&gt;</span> <span class="nv">$gist_id</span><span class="p">,</span></div><div class='line' id='LC109'>			<span class="s1">&#39;error&#39;</span> <span class="o">=&gt;</span> <span class="nv">$gist_body</span><span class="o">-&gt;</span><span class="na">error</span></div><div class='line' id='LC110'>		<span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC111'>	<span class="p">}</span></div><div class='line' id='LC112'><br/></div><div class='line' id='LC113'>	<span class="nx">update_post_meta</span><span class="p">(</span> <span class="nv">$post_id</span><span class="p">,</span> <span class="s1">&#39;_gist_id&#39;</span><span class="p">,</span> <span class="nv">$gist_id</span> <span class="p">);</span></div><div class='line' id='LC114'><br/></div><div class='line' id='LC115'>	<span class="nv">$gist_files</span> <span class="o">=</span> <span class="nv">$gist_body</span><span class="o">-&gt;</span><span class="na">files</span><span class="p">;</span></div><div class='line' id='LC116'><br/></div><div class='line' id='LC117'>	<span class="nb">preg_match_all</span><span class="p">(</span> <span class="s1">&#39;/&lt;pre&gt;(.+?)&lt;/pre&gt;/is&#39;</span><span class="p">,</span> <span class="nv">$gist_body</span><span class="o">-&gt;</span><span class="na">div</span><span class="p">,</span> <span class="nv">$gist_divs</span> <span class="p">);</span></div><div class='line' id='LC118'>	<span class="nv">$gist_divs</span> <span class="o">=</span> <span class="nv">$gist_divs</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span></div><div class='line' id='LC119'><br/></div><div class='line' id='LC120'>	<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$gist_files</span> <span class="k">as</span> <span class="nv">$i</span> <span class="o">=&gt;</span> <span class="nv">$gist_file</span> <span class="p">)</span></div><div class='line' id='LC121'>		<span class="nv">$gist_data</span><span class="p">[</span> <span class="nv">$gist_file</span> <span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;&lt;div class=&quot;gist-syntax&quot;&gt;&#39;</span> <span class="o">.</span> <span class="nv">$gist_divs</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">.</span> <span class="s1">&#39;&lt;/div&gt;&#39;</span><span class="p">;</span></div><div class='line' id='LC122'><br/></div><div class='line' id='LC123'>	<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$gist_data</span> <span class="k">as</span> <span class="nv">$file</span> <span class="o">=&gt;</span> <span class="nv">$gist_item</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC124'>		<span class="nv">$gist_new_meta</span> <span class="o">=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC125'>			<span class="s1">&#39;&lt;div&gt;&lt;p class=&quot;gist-meta&quot;&gt;&lt;a class=&quot;gist-raw&quot; href=&quot;%s&quot;&gt;RAW&lt;/a&gt; · &lt;a class=&quot;gist-download&quot; href=&quot;%s&quot;&gt;Download&lt;/a&gt; · &lt;a class=&quot;gist-github&quot; href=&quot;%s&quot;&gt;Gist@GitHub&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC126'>			<span class="nx">esc_url</span><span class="p">(</span> <span class="s2">&quot;https://gist.github.com/raw/</span><span class="si">{</span><span class="nv">$gist_id</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="nv">$file</span><span class="si">}</span><span class="s2">&quot;</span> <span class="p">),</span></div><div class='line' id='LC127'>			<span class="nx">esc_url</span><span class="p">(</span> <span class="s2">&quot;https://gist.github.com/gists/</span><span class="si">{</span><span class="nv">$gist_id</span><span class="si">}</span><span class="s2">/download&quot;</span><span class="p">),</span></div><div class='line' id='LC128'>			<span class="nx">esc_url</span><span class="p">(</span> <span class="s2">&quot;https://gist.github.com/</span><span class="si">{</span><span class="nv">$gist_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div><div class='line' id='LC129'>		<span class="p">);</span></div><div class='line' id='LC130'>		<span class="nv">$gist_data</span><span class="p">[</span> <span class="nv">$file</span> <span class="p">]</span> <span class="o">.=</span> <span class="nv">$gist_new_meta</span><span class="p">;</span></div><div class='line' id='LC131'>	<span class="p">}</span></div><div class='line' id='LC132'><br/></div><div class='line' id='LC133'>	<span class="nx">update_post_meta</span><span class="p">(</span> <span class="nv">$post_id</span><span class="p">,</span> <span class="s1">&#39;_gist_data&#39;</span><span class="p">,</span> <span class="nv">$gist_data</span> <span class="p">);</span></div><div class='line' id='LC134'><br/></div><div class='line' id='LC135'>	<span class="k">die</span><span class="p">(</span> <span class="nb">json_encode</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span></div><div class='line' id='LC136'>		<span class="s1">&#39;id&#39;</span>    <span class="o">=&gt;</span> <span class="nv">$gist_id</span><span class="p">,</span></div><div class='line' id='LC137'>		<span class="s1">&#39;files&#39;</span> <span class="o">=&gt;</span> <span class="nv">$gist_files</span></div><div class='line' id='LC138'>	<span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC139'><span class="p">}</span></div><div class='line' id='LC140'><br/></div><div class='line' id='LC141'><span class="cm">/*</span></div><div class='line' id='LC142'><span class="cm"> * AJAX callback function which handles the API response. Saves the data</span></div><div class='line' id='LC143'><span class="cm"> * into custom fields</span></div><div class='line' id='LC144'><span class="cm"> */</span></div><div class='line' id='LC145'><span class="k">function</span> <span class="nf">ds_convert_to_gist</span><span class="p">(</span> <span class="nv">$content</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC146'>	<span class="nv">$gist_data</span> <span class="o">=</span> <span class="nx">get_post_meta</span><span class="p">(</span> <span class="nx">get_the_ID</span><span class="p">(),</span> <span class="s1">&#39;_gist_data&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">);</span></div><div class='line' id='LC147'><br/></div><div class='line' id='LC148'>	<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$gist_data</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC149'>		<span class="k">return</span> <span class="nv">$content</span><span class="p">;</span></div><div class='line' id='LC150'><br/></div><div class='line' id='LC151'>	<span class="nx">wp_enqueue_style</span><span class="p">(</span><span class="s1">&#39;gist-css&#39;</span><span class="p">);</span></div><div class='line' id='LC152'><br/></div><div class='line' id='LC153'>	<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$gist_data</span> <span class="k">as</span> <span class="nv">$file</span> <span class="o">=&gt;</span> <span class="nv">$file_data</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC154'>		<span class="nv">$files</span><span class="p">[]</span> <span class="o">=</span> <span class="s1">&#39;/{&#39;</span> <span class="o">.</span> <span class="nv">$file</span> <span class="o">.</span> <span class="s1">&#39;}/&#39;</span><span class="p">;</span></div><div class='line' id='LC155'>		<span class="nv">$data</span><span class="p">[]</span>  <span class="o">=</span> <span class="nv">$file_data</span><span class="p">;</span></div><div class='line' id='LC156'>	<span class="p">}</span></div><div class='line' id='LC157'><br/></div><div class='line' id='LC158'>	<span class="nv">$content</span> <span class="o">=</span> <span class="nb">preg_replace</span><span class="p">(</span></div><div class='line' id='LC159'>		<span class="nv">$files</span><span class="p">,</span></div><div class='line' id='LC160'>		<span class="nv">$data</span><span class="p">,</span></div><div class='line' id='LC161'>		<span class="nv">$content</span></div><div class='line' id='LC162'>	<span class="p">);</span></div><div class='line' id='LC163'><br/></div><div class='line' id='LC164'>	<span class="k">return</span> <span class="nv">$content</span><span class="p">;</span></div><div class='line' id='LC165'><span class="p">}</span></div></pre></div><div class="cf"><p class="gist-meta"><a href="https://gist.github.com/raw/1580098/all-in-one.php">RAW</a> · <a class="gist-download" href="https://gist.github.com/gists/1580098/download">Download</a> · <a href="https://gist.github.com/1580098">Gist@GitHub</a></p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/schnipsel/gist-wordpress-einbinden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codeschnipsel: WordPress Page Template für einen Google+ Feed</title>
		<link>http://wpgrafie.de/schnipsel/page-template-google-plus-feed/</link>
		<comments>http://wpgrafie.de/schnipsel/page-template-google-plus-feed/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 07:00:16 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
		
		<guid isPermaLink="false">http://wpgrafie.de/?post_type=schnipsel&#038;p=567</guid>
		<description><![CDATA[Google+ ist im Kommen, auch gerade wegen den neuen Unternehmensseiten, welche unter anderem als Blog genutzt werden können. Doch einen RSS Feed sucht man vergeblich. Für mein Projekt WordPress Trac Activity wolte ich für die nicht Google+ Nutzer einen Feed anbieten. Google selbst bietet aber keinen Feed für den Google+ Stream an. Aus diesem Grund [...]]]></description>
			<content:encoded><![CDATA[<p itemprop="description">Google+ ist im Kommen, auch gerade wegen den neuen Unternehmensseiten, welche unter anderem als Blog genutzt werden können. Doch einen RSS Feed sucht man vergeblich.</p>
<div id="attachment_571" class="wp-caption aligncenter" style="width: 560px"><img src="http://wpgrafie.de/files/2011/12/google-your-business-550x148.png" alt="Google+ Your Business" title="Google+ Your Business" width="550" height="148" class="size-large wp-image-571" /><p class="wp-caption-text">Unternehmensseite: Google+ Your Business</p></div>
<p>Für mein <a href="http://wpgrafie.de/356/wordpress-trac-activity/">Projekt</a> <em><a href="https://plus.google.com/108232521223625019726">WordPress Trac Activity</a></em> wolte ich für die nicht Google+ Nutzer einen Feed anbieten. Google selbst bietet aber keinen Feed für den Google+ Stream an.</p>
<p>Aus diesem Grund habe ich ein <strong>Page Template</strong> für WordPress entwickelt, welches die Möglichkeit bietet, einen Feed für einen Google+ Stream zu erstellen.<br />
Ein Beispiel, der Feed für <em>Trac Activity</em>, ist unter <a href="http://wphelper.de/wp-trac-activity">wphelper.de/wp-trac-activity/</a> zu finden.</p>
<h3>Das Page Template</h3>
<p>Folgend der etwas größere Schnipsel mit anschließender Erklärung.</p>
<p><div class="gist-syntax"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span></div><div class='line' id='LC2'><span class="sd">/**</span></div><div class='line' id='LC3'><span class="sd"> * Template Name: Google+ Feed</span></div><div class='line' id='LC4'><span class="sd"> */</span></div><div class='line' id='LC5'><br/></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'><span class="sd">/**</span></div><div class='line' id='LC8'><span class="sd"> * A WordPress page template for a Google+ feed.</span></div><div class='line' id='LC9'><span class="sd"> *</span></div><div class='line' id='LC10'><span class="sd"> * @author Dominik Schilling</span></div><div class='line' id='LC11'><span class="sd"> * @license GPLv2</span></div><div class='line' id='LC12'><span class="sd"> * @link http://wpgrafie.de/567/</span></div><div class='line' id='LC13'><span class="sd"> *</span></div><div class='line' id='LC14'><span class="sd"> * @version 0.2</span></div><div class='line' id='LC15'><span class="sd"> */</span></div><div class='line' id='LC16'><span class="k">class</span> <span class="nc">Google_Plus_Feed</span> <span class="p">{</span></div><div class='line' id='LC17'>	<span class="sd">/**</span></div><div class='line' id='LC18'><span class="sd">	 * Google+ API Key.</span></div><div class='line' id='LC19'><span class="sd">	 * See https://code.google.com/apis/console/</span></div><div class='line' id='LC20'><span class="sd">	 *</span></div><div class='line' id='LC21'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC22'><span class="sd">	 *</span></div><div class='line' id='LC23'><span class="sd">	 * @var string</span></div><div class='line' id='LC24'><span class="sd">	 */</span></div><div class='line' id='LC25'>	<span class="k">private</span> <span class="nv">$api_key</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span></div><div class='line' id='LC26'><br/></div><div class='line' id='LC27'>	<span class="sd">/**</span></div><div class='line' id='LC28'><span class="sd">	 * Google+ User ID.</span></div><div class='line' id='LC29'><span class="sd">	 *</span></div><div class='line' id='LC30'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC31'><span class="sd">	 *</span></div><div class='line' id='LC32'><span class="sd">	 * @var string</span></div><div class='line' id='LC33'><span class="sd">	 */</span></div><div class='line' id='LC34'>	<span class="k">private</span> <span class="nv">$user_id</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span></div><div class='line' id='LC35'><br/></div><div class='line' id='LC36'>	<span class="sd">/**</span></div><div class='line' id='LC37'><span class="sd">	 * Custom settings.</span></div><div class='line' id='LC38'><span class="sd">	 * See $this-&gt;set_settings()</span></div><div class='line' id='LC39'><span class="sd">	 *</span></div><div class='line' id='LC40'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC41'><span class="sd">	 *</span></div><div class='line' id='LC42'><span class="sd">	 * @var array</span></div><div class='line' id='LC43'><span class="sd">	 */</span></div><div class='line' id='LC44'>	<span class="k">private</span> <span class="nv">$settings</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span></div><div class='line' id='LC45'><br/></div><div class='line' id='LC46'>	<span class="sd">/**</span></div><div class='line' id='LC47'><span class="sd">	 * Don&#39;t change the lines after these</span></div><div class='line' id='LC48'><span class="sd">	 * if you don&#39;t know what you do.</span></div><div class='line' id='LC49'><span class="sd">	 */</span></div><div class='line' id='LC50'><br/></div><div class='line' id='LC51'>	<span class="sd">/**</span></div><div class='line' id='LC52'><span class="sd">	 * Google+ activities.</span></div><div class='line' id='LC53'><span class="sd">	 *</span></div><div class='line' id='LC54'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC55'><span class="sd">	 *</span></div><div class='line' id='LC56'><span class="sd">	 * @var mixed</span></div><div class='line' id='LC57'><span class="sd">	 */</span></div><div class='line' id='LC58'>	<span class="k">private</span> <span class="nv">$activities</span><span class="p">;</span></div><div class='line' id='LC59'><br/></div><div class='line' id='LC60'>	<span class="sd">/**</span></div><div class='line' id='LC61'><span class="sd">	 * Current queried object.</span></div><div class='line' id='LC62'><span class="sd">	 *</span></div><div class='line' id='LC63'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC64'><span class="sd">	 *</span></div><div class='line' id='LC65'><span class="sd">	 * @var object</span></div><div class='line' id='LC66'><span class="sd">	 */</span></div><div class='line' id='LC67'>	<span class="k">private</span> <span class="nv">$curr_obj</span><span class="p">;</span></div><div class='line' id='LC68'><br/></div><div class='line' id='LC69'>	<span class="sd">/**</span></div><div class='line' id='LC70'><span class="sd">	 * Construct.</span></div><div class='line' id='LC71'><span class="sd">	 *</span></div><div class='line' id='LC72'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC73'><span class="sd">	 *</span></div><div class='line' id='LC74'><span class="sd">	 * @return void</span></div><div class='line' id='LC75'><span class="sd">	 */</span></div><div class='line' id='LC76'>	<span class="k">function</span> <span class="nf">__construct</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC77'>		<span class="k">if</span><span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">curr_obj</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC78'>			<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">curr_obj</span> <span class="o">=</span> <span class="nx">get_queried_object</span><span class="p">();</span></div><div class='line' id='LC79'><br/></div><div class='line' id='LC80'>		<span class="k">if</span><span class="p">(</span> <span class="o">!</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_api_key</span><span class="p">()</span> <span class="o">||</span> <span class="o">!</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_user_id</span><span class="p">()</span> <span class="p">)</span></div><div class='line' id='LC81'>			<span class="nx">wp_die</span><span class="p">(</span> <span class="s1">&#39;Not configured!&#39;</span> <span class="p">);</span></div><div class='line' id='LC82'><br/></div><div class='line' id='LC83'>		<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">set_settings</span><span class="p">();</span></div><div class='line' id='LC84'><br/></div><div class='line' id='LC85'>		<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">activities</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">build_activities</span><span class="p">();</span></div><div class='line' id='LC86'><br/></div><div class='line' id='LC87'>		<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">activities</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC88'>			<span class="nx">wp_die</span><span class="p">(</span> <span class="s1">&#39;Please load again.&#39;</span> <span class="p">);</span></div><div class='line' id='LC89'><br/></div><div class='line' id='LC90'>		<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">feed_output</span><span class="p">();</span></div><div class='line' id='LC91'>	<span class="p">}</span></div><div class='line' id='LC92'><br/></div><div class='line' id='LC93'>	<span class="sd">/**</span></div><div class='line' id='LC94'><span class="sd">	 * Get the API key from</span></div><div class='line' id='LC95'><span class="sd">	 *    post custom field (gplusfeed_api_key)</span></div><div class='line' id='LC96'><span class="sd">	 * or</span></div><div class='line' id='LC97'><span class="sd">	 *    $this-&gt;api_key</span></div><div class='line' id='LC98'><span class="sd">	 *</span></div><div class='line' id='LC99'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC100'><span class="sd">	 *</span></div><div class='line' id='LC101'><span class="sd">	 * @return string|bool Key on success, false if key is missing.</span></div><div class='line' id='LC102'><span class="sd">	 */</span></div><div class='line' id='LC103'>	<span class="k">function</span> <span class="nf">get_api_key</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC104'>		<span class="nv">$api_key</span> <span class="o">=</span> <span class="nx">get_post_meta</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">curr_obj</span><span class="o">-&gt;</span><span class="na">ID</span><span class="p">,</span> <span class="s1">&#39;gplusfeed_api_key&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">);</span></div><div class='line' id='LC105'><br/></div><div class='line' id='LC106'>		<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$api_key</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC107'>			<span class="k">return</span> <span class="nv">$api_key</span><span class="p">;</span></div><div class='line' id='LC108'>		<span class="k">else</span> <span class="k">if</span><span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">api_key</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC109'>			<span class="k">return</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">api_key</span><span class="p">;</span></div><div class='line' id='LC110'>		<span class="k">else</span></div><div class='line' id='LC111'>			<span class="k">return</span> <span class="k">false</span><span class="p">;</span></div><div class='line' id='LC112'>	<span class="p">}</span></div><div class='line' id='LC113'><br/></div><div class='line' id='LC114'>	<span class="sd">/**</span></div><div class='line' id='LC115'><span class="sd">	 * Get the user id from</span></div><div class='line' id='LC116'><span class="sd">	 *    post custom field (gplus_feed_user_id)</span></div><div class='line' id='LC117'><span class="sd">	 * or</span></div><div class='line' id='LC118'><span class="sd">	 *    $this-&gt;user_id</span></div><div class='line' id='LC119'><span class="sd">	 *</span></div><div class='line' id='LC120'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC121'><span class="sd">	 *</span></div><div class='line' id='LC122'><span class="sd">	 * @return string|bool Key on success, false if key is missing.</span></div><div class='line' id='LC123'><span class="sd">	 */</span></div><div class='line' id='LC124'>	<span class="k">function</span> <span class="nf">get_user_id</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC125'>		<span class="nv">$user_id</span> <span class="o">=</span> <span class="nx">get_post_meta</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">curr_obj</span><span class="o">-&gt;</span><span class="na">ID</span><span class="p">,</span> <span class="s1">&#39;gplus_feed_user_id&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">);</span></div><div class='line' id='LC126'><br/></div><div class='line' id='LC127'>		<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$user_id</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC128'>			<span class="k">return</span> <span class="nv">$user_id</span><span class="p">;</span></div><div class='line' id='LC129'>		<span class="k">else</span> <span class="k">if</span><span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">user_id</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC130'>			<span class="k">return</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">user_id</span><span class="p">;</span></div><div class='line' id='LC131'>		<span class="k">else</span></div><div class='line' id='LC132'>			<span class="k">return</span> <span class="k">false</span><span class="p">;</span></div><div class='line' id='LC133'>	<span class="p">}</span></div><div class='line' id='LC134'><br/></div><div class='line' id='LC135'>	<span class="sd">/**</span></div><div class='line' id='LC136'><span class="sd">	 * Set custom feed settings.</span></div><div class='line' id='LC137'><span class="sd">	 *</span></div><div class='line' id='LC138'><span class="sd">	 *  - limit: How many activities should be displayed in feed</span></div><div class='line' id='LC139'><span class="sd">	 *  - cache_time: How long the feed should be cached</span></div><div class='line' id='LC140'><span class="sd">	 *  - language: The language of the feed</span></div><div class='line' id='LC141'><span class="sd">	 *  - update_period: See http://web.resource.org/rss/1.0/modules/syndication/</span></div><div class='line' id='LC142'><span class="sd">	 *  - update_frequency: See http://web.resource.org/rss/1.0/modules/syndication/</span></div><div class='line' id='LC143'><span class="sd">	 *</span></div><div class='line' id='LC144'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC145'><span class="sd">	 *</span></div><div class='line' id='LC146'><span class="sd">	 * @return array Settings saved in an array.</span></div><div class='line' id='LC147'><span class="sd">	 */</span></div><div class='line' id='LC148'>	<span class="k">function</span> <span class="nf">set_settings</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC149'>		<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span> <span class="o">=</span> <span class="nx">wp_parse_args</span><span class="p">(</span></div><div class='line' id='LC150'>			<span class="k">array</span><span class="p">(</span></div><div class='line' id='LC151'>				<span class="s1">&#39;limit&#39;</span> <span class="o">=&gt;</span> <span class="mi">10</span><span class="p">,</span></div><div class='line' id='LC152'>				<span class="s1">&#39;cache_time&#39;</span> <span class="o">=&gt;</span> <span class="mi">300</span><span class="p">,</span></div><div class='line' id='LC153'>				<span class="s1">&#39;language&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;de&#39;</span><span class="p">,</span></div><div class='line' id='LC154'>				<span class="s1">&#39;update_period&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;hourly&#39;</span><span class="p">,</span></div><div class='line' id='LC155'>				<span class="s1">&#39;update_frequency&#39;</span> <span class="o">=&gt;</span> <span class="mi">1</span></div><div class='line' id='LC156'>			<span class="p">),</span></div><div class='line' id='LC157'>			<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span></div><div class='line' id='LC158'>		<span class="p">);</span></div><div class='line' id='LC159'>	<span class="p">}</span></div><div class='line' id='LC160'><br/></div><div class='line' id='LC161'>	<span class="sd">/**</span></div><div class='line' id='LC162'><span class="sd">	 * Get the Google+ API link.</span></div><div class='line' id='LC163'><span class="sd">	 * See https://developers.google.com/+/api/latest/activities/list</span></div><div class='line' id='LC164'><span class="sd">	 *</span></div><div class='line' id='LC165'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC166'><span class="sd">	 *</span></div><div class='line' id='LC167'><span class="sd">	 * @return string URL of the Google+ API.</span></div><div class='line' id='LC168'><span class="sd">	 */</span></div><div class='line' id='LC169'>	<span class="k">function</span> <span class="nf">get_api_link</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC170'>		<span class="nv">$api_link</span> <span class="o">=</span> <span class="nx">add_query_arg</span><span class="p">(</span></div><div class='line' id='LC171'>			<span class="k">array</span><span class="p">(</span></div><div class='line' id='LC172'>				<span class="s1">&#39;alt&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;json&#39;</span><span class="p">,</span></div><div class='line' id='LC173'>				<span class="s1">&#39;maxResults&#39;</span> <span class="o">=&gt;</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span><span class="p">[</span><span class="s1">&#39;limit&#39;</span><span class="p">],</span></div><div class='line' id='LC174'>				<span class="s1">&#39;pp&#39;</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span></div><div class='line' id='LC175'>				<span class="s1">&#39;key&#39;</span> <span class="o">=&gt;</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_api_key</span><span class="p">()</span></div><div class='line' id='LC176'>			<span class="p">),</span></div><div class='line' id='LC177'>			<span class="nb">sprintf</span><span class="p">(</span> <span class="s1">&#39;https://www.googleapis.com/plus/v1/people/%s/activities/public&#39;</span><span class="p">,</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_user_id</span><span class="p">()</span> <span class="p">)</span></div><div class='line' id='LC178'>		<span class="p">);</span></div><div class='line' id='LC179'><br/></div><div class='line' id='LC180'>		<span class="k">return</span> <span class="nx">esc_url_raw</span><span class="p">(</span> <span class="nv">$api_link</span> <span class="p">);</span></div><div class='line' id='LC181'>	<span class="p">}</span></div><div class='line' id='LC182'><br/></div><div class='line' id='LC183'>	<span class="sd">/**</span></div><div class='line' id='LC184'><span class="sd">	 * Build the activity stream and save it in a transient.</span></div><div class='line' id='LC185'><span class="sd">	 *</span></div><div class='line' id='LC186'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC187'><span class="sd">	 *</span></div><div class='line' id='LC188'><span class="sd">	 * @return string|bool Activities in XML format or false on error.</span></div><div class='line' id='LC189'><span class="sd">	 */</span></div><div class='line' id='LC190'>	<span class="k">function</span> <span class="nf">build_activities</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC191'>		<span class="nv">$dev</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span></div><div class='line' id='LC192'>		<span class="k">if</span> <span class="p">(</span> <span class="k">false</span> <span class="o">!==</span> <span class="p">(</span> <span class="nv">$activities</span> <span class="o">=</span> <span class="nx">get_transient</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_cache_key</span><span class="p">()</span> <span class="p">)</span> <span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="o">!</span> <span class="nv">$dev</span> <span class="p">)</span></div><div class='line' id='LC193'>			<span class="k">return</span> <span class="nv">$activities</span><span class="p">;</span></div><div class='line' id='LC194'><br/></div><div class='line' id='LC195'>		<span class="nv">$activities</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_activities</span><span class="p">();</span></div><div class='line' id='LC196'><br/></div><div class='line' id='LC197'>		<span class="k">if</span> <span class="p">(</span> <span class="nx">is_wp_error</span><span class="p">(</span> <span class="nv">$activities</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC198'>			<span class="k">return</span> <span class="k">false</span><span class="p">;</span></div><div class='line' id='LC199'><br/></div><div class='line' id='LC200'>		<span class="nv">$activities</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">render_activities</span><span class="p">(</span> <span class="nv">$activities</span> <span class="p">);</span></div><div class='line' id='LC201'><br/></div><div class='line' id='LC202'>		<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$activities</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC203'>			<span class="k">return</span> <span class="k">false</span><span class="p">;</span></div><div class='line' id='LC204'><br/></div><div class='line' id='LC205'>		<span class="c1">// Cache activities</span></div><div class='line' id='LC206'>		<span class="nx">set_transient</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_cache_key</span><span class="p">(),</span> <span class="nv">$activities</span><span class="p">,</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span><span class="p">[</span><span class="s1">&#39;cache_time&#39;</span><span class="p">]</span> <span class="p">);</span></div><div class='line' id='LC207'><br/></div><div class='line' id='LC208'>		<span class="k">return</span> <span class="nv">$activities</span><span class="p">;</span></div><div class='line' id='LC209'>	<span class="p">}</span></div><div class='line' id='LC210'><br/></div><div class='line' id='LC211'>	<span class="sd">/**</span></div><div class='line' id='LC212'><span class="sd">	 * Build an individual cache key.</span></div><div class='line' id='LC213'><span class="sd">	 * Based on settings, user id and API key.</span></div><div class='line' id='LC214'><span class="sd">	 *</span></div><div class='line' id='LC215'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC216'><span class="sd">	 *</span></div><div class='line' id='LC217'><span class="sd">	 * @return string The cache key.</span></div><div class='line' id='LC218'><span class="sd">	 */</span></div><div class='line' id='LC219'>	<span class="k">function</span> <span class="nf">get_cache_key</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC220'>		<span class="k">return</span> <span class="s1">&#39;gplus_feed_&#39;</span> <span class="o">.</span> <span class="nb">md5</span><span class="p">(</span></div><div class='line' id='LC221'>			<span class="nb">implode</span><span class="p">(</span> <span class="s1">&#39;|&#39;</span><span class="p">,</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span> <span class="p">)</span></div><div class='line' id='LC222'>			<span class="o">.</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_user_id</span><span class="p">()</span></div><div class='line' id='LC223'>			<span class="o">.</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_api_key</span><span class="p">()</span></div><div class='line' id='LC224'>		<span class="p">);</span></div><div class='line' id='LC225'>	<span class="p">}</span></div><div class='line' id='LC226'><br/></div><div class='line' id='LC227'>	<span class="sd">/**</span></div><div class='line' id='LC228'><span class="sd">	 * Get the activities from Google+ API.</span></div><div class='line' id='LC229'><span class="sd">	 *</span></div><div class='line' id='LC230'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC231'><span class="sd">	 *</span></div><div class='line' id='LC232'><span class="sd">	 * @return array|WP_Error API result in an array or WP_Error on API/HTTP error.</span></div><div class='line' id='LC233'><span class="sd">	 */</span></div><div class='line' id='LC234'>	<span class="k">function</span> <span class="nf">get_activities</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC235'>		<span class="nv">$result</span> <span class="o">=</span> <span class="nx">wp_remote_retrieve_body</span><span class="p">(</span></div><div class='line' id='LC236'>			<span class="nx">wp_remote_get</span><span class="p">(</span></div><div class='line' id='LC237'>				<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_api_link</span><span class="p">()</span></div><div class='line' id='LC238'>			<span class="p">)</span></div><div class='line' id='LC239'>		<span class="p">);</span></div><div class='line' id='LC240'><br/></div><div class='line' id='LC241'>		<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$result</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC242'>			<span class="nv">$result</span> <span class="o">=</span> <span class="p">(</span><span class="k">array</span><span class="p">)</span> <span class="nb">json_decode</span><span class="p">(</span> <span class="nv">$result</span> <span class="p">);</span></div><div class='line' id='LC243'><br/></div><div class='line' id='LC244'>			<span class="k">if</span> <span class="p">(</span> <span class="k">empty</span> <span class="p">(</span> <span class="nv">$results</span><span class="o">-&gt;</span><span class="na">error</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC245'>				<span class="k">return</span> <span class="nv">$result</span><span class="p">;</span></div><div class='line' id='LC246'>			<span class="k">else</span></div><div class='line' id='LC247'>				<span class="k">return</span> <span class="k">new</span> <span class="nx">WP_Error</span><span class="p">(</span> <span class="s1">&#39;api_error&#39;</span><span class="p">,</span> <span class="s1">&#39;API ERROR&#39;</span><span class="p">,</span> <span class="nv">$results</span><span class="o">-&gt;</span><span class="na">error</span> <span class="p">);</span></div><div class='line' id='LC248'>		<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC249'>			<span class="k">return</span> <span class="k">new</span> <span class="nx">WP_Error</span><span class="p">(</span> <span class="s1">&#39;http_error&#39;</span><span class="p">,</span> <span class="s1">&#39;HTTP ERROR&#39;</span><span class="p">);</span></div><div class='line' id='LC250'>		<span class="p">}</span></div><div class='line' id='LC251'>	<span class="p">}</span></div><div class='line' id='LC252'><br/></div><div class='line' id='LC253'>	<span class="sd">/**</span></div><div class='line' id='LC254'><span class="sd">	 * Render the activities and return them in XML format.</span></div><div class='line' id='LC255'><span class="sd">	 *</span></div><div class='line' id='LC256'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC257'><span class="sd">	 *</span></div><div class='line' id='LC258'><span class="sd">	 * @param array $activities</span></div><div class='line' id='LC259'><span class="sd">	 * @return array Rendered activity items for feed.</span></div><div class='line' id='LC260'><span class="sd">	 */</span></div><div class='line' id='LC261'>	<span class="k">function</span> <span class="nf">render_activities</span><span class="p">(</span> <span class="nv">$activities</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC262'>		<span class="nv">$feed</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span></div><div class='line' id='LC263'><br/></div><div class='line' id='LC264'>		<span class="k">foreach</span><span class="p">(</span> <span class="nv">$activities</span><span class="p">[</span><span class="s1">&#39;items&#39;</span><span class="p">]</span> <span class="k">as</span> <span class="nv">$item</span> <span class="o">=&gt;</span> <span class="nv">$data</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC265'>			<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="nb">preg_match</span><span class="p">(</span><span class="s1">&#39;/^&lt;bb[^&gt;]*&gt;(.*?)&lt;/b&gt;/i&#39;</span><span class="p">,</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">object</span><span class="o">-&gt;</span><span class="na">content</span><span class="p">,</span> <span class="nv">$matches</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC266'>				<span class="nv">$title</span> <span class="o">=</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">title</span><span class="p">;</span></div><div class='line' id='LC267'>				<span class="nv">$content</span> <span class="o">=</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">object</span><span class="o">-&gt;</span><span class="na">content</span><span class="p">;</span></div><div class='line' id='LC268'>			<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC269'>				<span class="nv">$title</span> <span class="o">=</span> <span class="nb">strip_tags</span><span class="p">(</span> <span class="nv">$matches</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">);</span></div><div class='line' id='LC270'>				<span class="nv">$content</span> <span class="o">=</span> <span class="nb">str_replace</span><span class="p">(</span> <span class="nv">$matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">.</span> <span class="s1">&#39;&lt;br /&gt;&lt;br /&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">object</span><span class="o">-&gt;</span><span class="na">content</span> <span class="p">);</span></div><div class='line' id='LC271'>			<span class="p">}</span></div><div class='line' id='LC272'><br/></div><div class='line' id='LC273'>			<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">object</span><span class="o">-&gt;</span><span class="na">attachments</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC274'>				<span class="nv">$content</span> <span class="o">.=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_render_activity_attachments</span><span class="p">(</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">object</span><span class="o">-&gt;</span><span class="na">attachments</span> <span class="p">);</span></div><div class='line' id='LC275'><br/></div><div class='line' id='LC276'>			<span class="nv">$feed</span><span class="p">[</span><span class="nv">$item</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;</span></div><div class='line' id='LC277'><span class="s2">&lt;item&gt;</span></div><div class='line' id='LC278'><span class="s2">	&lt;title&gt;</span><span class="si">{</span><span class="nv">$title</span><span class="si">}</span><span class="s2">&lt;/title&gt;</span></div><div class='line' id='LC279'><span class="s2">	&lt;link&gt;</span><span class="si">{</span><span class="nv">$data</span><span class="o">-&gt;</span><span class="na">url</span><span class="si">}</span><span class="s2">&lt;/link&gt;</span></div><div class='line' id='LC280'><span class="s2">	&lt;pubDate&gt;&quot;</span> <span class="o">.</span> <span class="nx">mysql2date</span><span class="p">(</span> <span class="s1">&#39;D, d M Y H:i:s +0000&#39;</span><span class="p">,</span> <span class="nv">$data</span><span class="o">-&gt;</span><span class="na">published</span><span class="p">,</span> <span class="k">false</span> <span class="p">)</span> <span class="o">.</span> <span class="s2">&quot;&lt;/pubDate&gt;</span></div><div class='line' id='LC281'><span class="s2">	&lt;dc:creator&gt;</span><span class="si">{</span><span class="nv">$data</span><span class="o">-&gt;</span><span class="na">actor</span><span class="o">-&gt;</span><span class="na">displayName</span><span class="si">}</span><span class="s2">&lt;/dc:creator&gt;</span></div><div class='line' id='LC282'><span class="s2">	&lt;guid isPermaLink=</span><span class="se">&quot;</span><span class="s2">false</span><span class="se">&quot;</span><span class="s2">&gt;</span><span class="si">{</span><span class="nv">$data</span><span class="o">-&gt;</span><span class="na">url</span><span class="si">}</span><span class="s2">&lt;/guid&gt;</span></div><div class='line' id='LC283'><br/></div><div class='line' id='LC284'><span class="s2">	&lt;description&gt;&lt;![CDATA[&quot;</span> <span class="o">.</span> <span class="nx">wp_trim_words</span><span class="p">(</span> <span class="nv">$content</span><span class="p">,</span> <span class="mi">20</span> <span class="p">)</span> <span class="o">.</span> <span class="s2">&quot;]]&gt;&lt;/description&gt;</span></div><div class='line' id='LC285'><span class="s2">	&lt;content:encoded&gt;&lt;![CDATA[</span><span class="si">{</span><span class="nv">$content</span><span class="si">}</span><span class="s2">]]&gt;&lt;/content:encoded&gt;</span></div><div class='line' id='LC286'><br/></div><div class='line' id='LC287'><span class="s2">	&lt;slash:comments&gt;</span><span class="si">{</span><span class="nv">$data</span><span class="o">-&gt;</span><span class="na">object</span><span class="o">-&gt;</span><span class="na">replies</span><span class="o">-&gt;</span><span class="na">totalItems</span><span class="si">}</span><span class="s2">&lt;/slash:comments&gt;</span></div><div class='line' id='LC288'><span class="s2">&lt;/item&gt;</span></div><div class='line' id='LC289'><span class="s2">&quot;</span><span class="p">;</span></div><div class='line' id='LC290'>		<span class="p">}</span></div><div class='line' id='LC291'><br/></div><div class='line' id='LC292'>		<span class="k">return</span> <span class="nv">$feed</span><span class="p">;</span></div><div class='line' id='LC293'>	<span class="p">}</span></div><div class='line' id='LC294'><br/></div><div class='line' id='LC295'>	<span class="sd">/**</span></div><div class='line' id='LC296'><span class="sd">	 * Handle activity attachments, like video, photo and links (articles).</span></div><div class='line' id='LC297'><span class="sd">	 *</span></div><div class='line' id='LC298'><span class="sd">	 * @since 0.2</span></div><div class='line' id='LC299'><span class="sd">	 *</span></div><div class='line' id='LC300'><span class="sd">	 * @param array $attachments</span></div><div class='line' id='LC301'><span class="sd">	 * @return string Attachments in HTML format.</span></div><div class='line' id='LC302'><span class="sd">	 */</span></div><div class='line' id='LC303'>	<span class="k">function</span> <span class="nf">_render_activity_attachments</span><span class="p">(</span> <span class="nv">$attachments</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC304'>		<span class="nv">$articles</span> <span class="o">=</span> <span class="nv">$photos</span> <span class="o">=</span> <span class="nv">$videos</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span></div><div class='line' id='LC305'><br/></div><div class='line' id='LC306'>		<span class="k">foreach</span> <span class="p">(</span> <span class="nv">$attachments</span> <span class="k">as</span> <span class="nv">$attachment</span> <span class="o">=&gt;</span> <span class="nv">$meta</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC307'>			<span class="k">switch</span> <span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">objectType</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC308'>				<span class="k">case</span> <span class="s1">&#39;article&#39;</span> <span class="o">:</span></div><div class='line' id='LC309'>					<span class="nv">$host</span> <span class="o">=</span> <span class="o">@</span><span class="nb">parse_url</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">url</span><span class="p">,</span> <span class="nx">PHP_URL_HOST</span> <span class="p">);</span></div><div class='line' id='LC310'>					<span class="nv">$articles</span><span class="p">[]</span> <span class="o">=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC311'>						<span class="s1">&#39;%s&lt;a href=&quot;%s&quot; title=&quot;%s&quot;&gt;%s&lt;/a&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC312'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$host</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nv">$host</span> <span class="o">.</span> <span class="s1">&#39; – &#39;</span><span class="p">,</span></div><div class='line' id='LC313'>						<span class="nx">esc_url</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">url</span> <span class="p">),</span></div><div class='line' id='LC314'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">content</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nx">esc_attr</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">content</span> <span class="p">),</span></div><div class='line' id='LC315'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span></div><div class='line' id='LC316'>					<span class="p">);</span></div><div class='line' id='LC317'>					<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC318'>				<span class="k">case</span> <span class="s1">&#39;photo&#39;</span> <span class="o">:</span></div><div class='line' id='LC319'>					<span class="nv">$photos</span><span class="p">[]</span> <span class="o">=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC320'>						<span class="s1">&#39;%s&lt;img src=&quot;%s&quot; height=&quot;%s&quot; width=&quot;%s&quot; alt=&quot;%s&quot; title=&quot;%s&quot; style=&quot;margin:5px;max-width:250px;height:auto&quot; /&gt;%s&#39;</span><span class="p">,</span></div><div class='line' id='LC321'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">fullImage</span><span class="o">-&gt;</span><span class="na">url</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="s1">&#39;&lt;a href=&quot;&#39;</span> <span class="o">.</span> <span class="nx">esc_url</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">fullImage</span><span class="o">-&gt;</span><span class="na">url</span> <span class="p">)</span> <span class="o">.</span> <span class="s1">&#39;&quot;&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC322'>						<span class="nx">esc_url</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">url</span> <span class="p">),</span></div><div class='line' id='LC323'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">height</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nx">esc_attr</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">height</span> <span class="p">),</span></div><div class='line' id='LC324'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">width</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nx">esc_attr</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">width</span> <span class="p">),</span></div><div class='line' id='LC325'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span><span class="p">,</span></div><div class='line' id='LC326'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span><span class="p">,</span></div><div class='line' id='LC327'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">fullImage</span><span class="o">-&gt;</span><span class="na">url</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="s1">&#39;&lt;/a&gt;&#39;</span></div><div class='line' id='LC328'>					<span class="p">);</span></div><div class='line' id='LC329'>					<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC330'>				<span class="k">case</span> <span class="s1">&#39;video&#39;</span> <span class="o">:</span></div><div class='line' id='LC331'>					<span class="nv">$videos</span><span class="p">[]</span> <span class="o">=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC332'>						<span class="s1">&#39;&lt;a href=&quot;%s&quot;&gt;&lt;img src=&quot;%s&quot; height=&quot;%s&quot; width=&quot;%s&quot; alt=&quot;%s&quot; title=&quot;%s&quot; style=&quot;margin:5px;max-width:250px;height:auto&quot; /&gt;&lt;/a&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC333'>						<span class="nx">esc_url</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">url</span> <span class="p">),</span></div><div class='line' id='LC334'>						<span class="nx">esc_url</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">url</span> <span class="p">),</span></div><div class='line' id='LC335'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">height</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nx">esc_attr</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">height</span> <span class="p">),</span></div><div class='line' id='LC336'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">width</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nx">esc_attr</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">image</span><span class="o">-&gt;</span><span class="na">width</span> <span class="p">),</span></div><div class='line' id='LC337'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span><span class="p">,</span></div><div class='line' id='LC338'>						<span class="k">empty</span><span class="p">(</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span> <span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;&#39;</span> <span class="o">:</span> <span class="nv">$meta</span><span class="o">-&gt;</span><span class="na">displayName</span></div><div class='line' id='LC339'>					<span class="p">);</span></div><div class='line' id='LC340'>					<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC341'>			<span class="p">}</span></div><div class='line' id='LC342'>		<span class="p">}</span></div><div class='line' id='LC343'><br/></div><div class='line' id='LC344'>		<span class="nv">$content</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span></div><div class='line' id='LC345'>		<span class="nv">$_html</span> <span class="o">=</span> <span class="s1">&#39;&lt;div style=&quot;display:table-row&quot;&gt;&lt;div style=&quot;display:table-cell;vertical-align:top;padding:0 10px 0 0&quot;&gt;&lt;b&gt;%s:&lt;/b&gt;&lt;/div&gt;&#39;</span><span class="p">;</span></div><div class='line' id='LC346'>		<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$articles</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC347'>			<span class="nv">$articles</span> <span class="o">=</span> <span class="nb">implode</span><span class="p">(</span> <span class="s1">&#39;&lt;br /&gt;&#39;</span><span class="p">,</span> <span class="nv">$articles</span> <span class="p">);</span></div><div class='line' id='LC348'>			<span class="nv">$content</span> <span class="o">.=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC349'>				<span class="nv">$_html</span><span class="p">,</span></div><div class='line' id='LC350'>				<span class="nx">__</span><span class="p">(</span> <span class="s1">&#39;Links&#39;</span> <span class="p">)</span></div><div class='line' id='LC351'>			<span class="p">);</span></div><div class='line' id='LC352'>			<span class="nv">$content</span> <span class="o">.=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC353'>				<span class="s1">&#39;&lt;div style=&quot;display:table-cell&quot;&gt;%s&lt;/div&gt;&lt;/div&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC354'>				<span class="nv">$articles</span></div><div class='line' id='LC355'>			<span class="p">);</span></div><div class='line' id='LC356'>		<span class="p">}</span></div><div class='line' id='LC357'><br/></div><div class='line' id='LC358'>		<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$photos</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC359'>			<span class="nv">$photos</span> <span class="o">=</span> <span class="nb">implode</span><span class="p">(</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$photos</span> <span class="p">);</span></div><div class='line' id='LC360'>			<span class="nv">$content</span> <span class="o">.=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC361'>				<span class="nv">$_html</span><span class="p">,</span></div><div class='line' id='LC362'>				<span class="nx">__</span><span class="p">(</span> <span class="s1">&#39;Images&#39;</span> <span class="p">)</span></div><div class='line' id='LC363'>			<span class="p">);</span></div><div class='line' id='LC364'>			<span class="nv">$content</span> <span class="o">.=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC365'>				<span class="s1">&#39;&lt;div style=&quot;display:table-cell&quot;&gt;%s&lt;/div&gt;&lt;/div&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC366'>				<span class="nv">$photos</span></div><div class='line' id='LC367'>			<span class="p">);</span></div><div class='line' id='LC368'>		<span class="p">}</span></div><div class='line' id='LC369'><br/></div><div class='line' id='LC370'>		<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$videos</span> <span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC371'>			<span class="nv">$videos</span> <span class="o">=</span> <span class="nb">implode</span><span class="p">(</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$videos</span> <span class="p">);</span></div><div class='line' id='LC372'>			<span class="nv">$content</span> <span class="o">.=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC373'>				<span class="nv">$_html</span><span class="p">,</span></div><div class='line' id='LC374'>				<span class="nx">__</span><span class="p">(</span> <span class="s1">&#39;Video&#39;</span> <span class="p">)</span></div><div class='line' id='LC375'>			<span class="p">);</span></div><div class='line' id='LC376'>			<span class="nv">$content</span> <span class="o">.=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC377'>				<span class="s1">&#39;&lt;div style=&quot;display:table-cell&quot;&gt;%s&lt;/div&gt;&lt;/div&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC378'>				<span class="nv">$videos</span></div><div class='line' id='LC379'>			<span class="p">);</span></div><div class='line' id='LC380'>		<span class="p">}</span></div><div class='line' id='LC381'><br/></div><div class='line' id='LC382'>		<span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="k">empty</span><span class="p">(</span> <span class="nv">$content</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC383'>			<span class="nv">$content</span> <span class="o">=</span> <span class="nb">sprintf</span><span class="p">(</span></div><div class='line' id='LC384'>				<span class="s1">&#39;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;%s&lt;/h4&gt;&lt;div style=&quot;display:table&quot;&gt;%s&lt;/div&gt;&#39;</span><span class="p">,</span></div><div class='line' id='LC385'>				<span class="nx">__</span><span class="p">(</span> <span class="s1">&#39;Images and Attachments&#39;</span> <span class="p">),</span></div><div class='line' id='LC386'>				<span class="nv">$content</span></div><div class='line' id='LC387'>			<span class="p">);</span></div><div class='line' id='LC388'><br/></div><div class='line' id='LC389'>		<span class="k">return</span> <span class="nv">$content</span><span class="p">;</span></div><div class='line' id='LC390'>	<span class="p">}</span></div><div class='line' id='LC391'><br/></div><div class='line' id='LC392'>	<span class="sd">/**</span></div><div class='line' id='LC393'><span class="sd">	 * Build the feed output.</span></div><div class='line' id='LC394'><span class="sd">	 *</span></div><div class='line' id='LC395'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC396'><span class="sd">	 *</span></div><div class='line' id='LC397'><span class="sd">	 * @return void</span></div><div class='line' id='LC398'><span class="sd">	 */</span></div><div class='line' id='LC399'>	<span class="k">function</span> <span class="nf">feed_output</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC400'>		<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_rss_header</span><span class="p">();</span></div><div class='line' id='LC401'>		<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_rss_content</span><span class="p">();</span></div><div class='line' id='LC402'>		<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_rss_footer</span><span class="p">();</span></div><div class='line' id='LC403'>	<span class="p">}</span></div><div class='line' id='LC404'><br/></div><div class='line' id='LC405'>	<span class="sd">/**</span></div><div class='line' id='LC406'><span class="sd">	 * Retrieve information about the feed.</span></div><div class='line' id='LC407'><span class="sd">	 *</span></div><div class='line' id='LC408'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC409'><span class="sd">	 *</span></div><div class='line' id='LC410'><span class="sd">	 * @param string $show Feed info to retrieve.</span></div><div class='line' id='LC411'><span class="sd">	 * @param bool $echo Return or print the info. Default: true.</span></div><div class='line' id='LC412'><span class="sd">	 * @return string Feed info.</span></div><div class='line' id='LC413'><span class="sd">	 */</span></div><div class='line' id='LC414'>	<span class="k">function</span> <span class="nf">get_feed_info</span><span class="p">(</span> <span class="nv">$show</span><span class="p">,</span> <span class="nv">$echo</span> <span class="o">=</span> <span class="k">true</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC415'>		<span class="k">switch</span> <span class="p">(</span> <span class="nv">$show</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC416'>			<span class="k">case</span> <span class="s1">&#39;title&#39;</span> <span class="o">:</span></div><div class='line' id='LC417'>				<span class="nv">$output</span> <span class="o">=</span> <span class="nx">apply_filters</span><span class="p">(</span> <span class="s1">&#39;the_title_rss&#39;</span><span class="p">,</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">curr_obj</span><span class="o">-&gt;</span><span class="na">post_title</span> <span class="p">)</span> <span class="p">;</span></div><div class='line' id='LC418'>				<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC419'>			<span class="k">case</span> <span class="s1">&#39;self&#39;</span> <span class="o">:</span></div><div class='line' id='LC420'>				<span class="nv">$host</span> <span class="o">=</span> <span class="o">@</span><span class="nb">parse_url</span><span class="p">(</span> <span class="nx">home_url</span><span class="p">()</span> <span class="p">);</span></div><div class='line' id='LC421'>				<span class="nv">$host</span> <span class="o">=</span> <span class="nv">$host</span><span class="p">[</span><span class="s1">&#39;host&#39;</span><span class="p">];</span></div><div class='line' id='LC422'>				<span class="nv">$output</span> <span class="o">=</span> <span class="nx">esc_url</span><span class="p">(</span></div><div class='line' id='LC423'>					<span class="p">(</span> <span class="nx">is_ssl</span><span class="p">()</span> <span class="o">?</span> <span class="s1">&#39;https&#39;</span> <span class="o">:</span> <span class="s1">&#39;http&#39;</span> <span class="p">)</span> <span class="o">.</span> <span class="s1">&#39;://&#39;</span></div><div class='line' id='LC424'>					<span class="o">.</span> <span class="nv">$host</span></div><div class='line' id='LC425'>					<span class="o">.</span> <span class="nb">stripslashes</span><span class="p">(</span> <span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">&#39;REQUEST_URI&#39;</span><span class="p">]</span> <span class="p">)</span></div><div class='line' id='LC426'>				<span class="p">);</span></div><div class='line' id='LC427'>				<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC428'>			<span class="k">case</span> <span class="s1">&#39;link&#39;</span> <span class="o">:</span></div><div class='line' id='LC429'>				<span class="nv">$output</span> <span class="o">=</span> <span class="nx">esc_url</span><span class="p">(</span> <span class="nb">sprintf</span><span class="p">(</span> <span class="s1">&#39;https://plus.google.com/%d/&#39;</span><span class="p">,</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_user_id</span><span class="p">()</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC430'>				<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC431'>			<span class="k">case</span> <span class="s1">&#39;desc&#39;</span> <span class="o">:</span></div><div class='line' id='LC432'>				<span class="nv">$output</span> <span class="o">=</span> <span class="nx">apply_filters</span><span class="p">(</span> <span class="s1">&#39;the_title_rss&#39;</span><span class="p">,</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">curr_obj</span><span class="o">-&gt;</span><span class="na">post_content</span> <span class="p">);</span></div><div class='line' id='LC433'>				<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC434'>			<span class="k">case</span> <span class="s1">&#39;time&#39;</span> <span class="o">:</span></div><div class='line' id='LC435'>				<span class="nv">$timeout</span> <span class="o">=</span> <span class="nx">get_option</span><span class="p">(</span> <span class="s1">&#39;_transient_timeout_&#39;</span> <span class="o">.</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_cache_key</span><span class="p">()</span> <span class="p">);</span></div><div class='line' id='LC436'>				<span class="k">if</span> <span class="p">(</span> <span class="nv">$timeout</span> <span class="o">===</span> <span class="k">false</span> <span class="p">)</span></div><div class='line' id='LC437'>					<span class="nv">$time</span> <span class="o">=</span> <span class="nb">time</span><span class="p">();</span></div><div class='line' id='LC438'>				<span class="k">else</span></div><div class='line' id='LC439'>					<span class="nv">$time</span> <span class="o">=</span> <span class="nv">$timeout</span> <span class="o">-</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span><span class="p">[</span><span class="s1">&#39;cache_time&#39;</span><span class="p">];</span></div><div class='line' id='LC440'>				<span class="nv">$output</span> <span class="o">=</span> <span class="nb">date</span><span class="p">(</span> <span class="s1">&#39;D, d M Y H:i:s +0000&#39;</span><span class="p">,</span> <span class="nv">$time</span> <span class="p">);</span></div><div class='line' id='LC441'>				<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC442'>			<span class="k">case</span> <span class="s1">&#39;language&#39;</span> <span class="o">:</span></div><div class='line' id='LC443'>				<span class="nv">$output</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span><span class="p">[</span><span class="s1">&#39;language&#39;</span><span class="p">];</span></div><div class='line' id='LC444'>				<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC445'>			<span class="k">case</span> <span class="s1">&#39;update_period&#39;</span> <span class="o">:</span></div><div class='line' id='LC446'>				<span class="nv">$output</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span><span class="p">[</span><span class="s1">&#39;update_period&#39;</span><span class="p">];</span></div><div class='line' id='LC447'>				<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC448'>			<span class="k">case</span> <span class="s1">&#39;update_frequency&#39;</span> <span class="o">:</span></div><div class='line' id='LC449'>				<span class="nv">$output</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">settings</span><span class="p">[</span><span class="s1">&#39;update_frequency&#39;</span><span class="p">];</span></div><div class='line' id='LC450'>				<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC451'>		<span class="p">}</span></div><div class='line' id='LC452'><br/></div><div class='line' id='LC453'>		<span class="k">if</span><span class="p">(</span> <span class="o">!</span> <span class="nv">$echo</span> <span class="p">)</span></div><div class='line' id='LC454'>			<span class="k">return</span> <span class="nv">$output</span><span class="p">;</span></div><div class='line' id='LC455'><br/></div><div class='line' id='LC456'>		<span class="k">echo</span> <span class="nv">$output</span><span class="p">;</span></div><div class='line' id='LC457'>	<span class="p">}</span></div><div class='line' id='LC458'><br/></div><div class='line' id='LC459'>	<span class="sd">/**</span></div><div class='line' id='LC460'><span class="sd">	 * Print the feed header.</span></div><div class='line' id='LC461'><span class="sd">	 *</span></div><div class='line' id='LC462'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC463'><span class="sd">	 *</span></div><div class='line' id='LC464'><span class="sd">	 * @return void</span></div><div class='line' id='LC465'><span class="sd">	 */</span></div><div class='line' id='LC466'>	<span class="k">function</span> <span class="nf">get_rss_header</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC467'>		<span class="nx">header</span><span class="p">(</span> <span class="s1">&#39;Content-Type: text/xml; charset=UTF-8&#39;</span><span class="p">,</span> <span class="k">true</span> <span class="p">);</span></div><div class='line' id='LC468'>		<span class="k">echo</span> <span class="s1">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&#39;</span><span class="o">.</span><span class="s1">&#39;&gt;&#39;</span><span class="p">;</span></div><div class='line' id='LC469'>	<span class="cp">?&gt;</span><span class="x"></span></div><div class='line' id='LC470'><span class="x">&lt;rss version=&quot;2.0&quot;</span></div><div class='line' id='LC471'><span class="x">xmlns:content=&quot;http://purl.org/rss/1.0/modules/content/&quot;</span></div><div class='line' id='LC472'><span class="x">xmlns:wfw=&quot;http://wellformedweb.org/CommentAPI/&quot;</span></div><div class='line' id='LC473'><span class="x">xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;</span></div><div class='line' id='LC474'><span class="x">xmlns:atom=&quot;http://www.w3.org/2005/Atom&quot;</span></div><div class='line' id='LC475'><span class="x">xmlns:sy=&quot;http://purl.org/rss/1.0/modules/syndication/&quot;</span></div><div class='line' id='LC476'><span class="x">xmlns:slash=&quot;http://purl.org/rss/1.0/modules/slash/&quot;</span></div><div class='line' id='LC477'><span class="x">&gt;</span></div><div class='line' id='LC478'><span class="x">&lt;channel&gt;</span></div><div class='line' id='LC479'><span class="x">	&lt;title&gt;</span><span class="cp">&lt;?php</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_feed_info</span><span class="p">(</span> <span class="s1">&#39;title&#39;</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&lt;/title&gt;</span></div><div class='line' id='LC480'><span class="x">	&lt;atom:link href=&quot;</span><span class="cp">&lt;?php</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_feed_info</span><span class="p">(</span> <span class="s1">&#39;self&#39;</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&quot; rel=&quot;self&quot; type=&quot;application/rss+xml&quot; /&gt;</span></div><div class='line' id='LC481'><span class="x">	&lt;link&gt;</span><span class="cp">&lt;?php</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_feed_info</span><span class="p">(</span> <span class="s1">&#39;link&#39;</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&lt;/link&gt;</span></div><div class='line' id='LC482'><span class="x">	&lt;description&gt;</span><span class="cp">&lt;?php</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_feed_info</span><span class="p">(</span> <span class="s1">&#39;desc&#39;</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&lt;/description&gt;</span></div><div class='line' id='LC483'><span class="x">	&lt;lastBuildDate&gt;</span><span class="cp">&lt;?php</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_feed_info</span><span class="p">(</span> <span class="s1">&#39;time&#39;</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&lt;/lastBuildDate&gt;</span></div><div class='line' id='LC484'><span class="x">	&lt;language&gt;</span><span class="cp">&lt;?php</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_feed_info</span><span class="p">(</span> <span class="s1">&#39;language&#39;</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&lt;/language&gt;</span></div><div class='line' id='LC485'><span class="x">	&lt;sy:updatePeriod&gt;</span><span class="cp">&lt;?php</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_feed_info</span><span class="p">(</span> <span class="s1">&#39;update_period&#39;</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&lt;/sy:updatePeriod&gt;</span></div><div class='line' id='LC486'><span class="x">	&lt;sy:updateFrequency&gt;</span><span class="cp">&lt;?php</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">get_feed_info</span><span class="p">(</span> <span class="s1">&#39;update_frequency&#39;</span> <span class="p">);</span> <span class="cp">?&gt;</span><span class="x">&lt;/sy:updateFrequency&gt;</span></div><div class='line' id='LC487'><span class="x">	</span><span class="cp">&lt;?php</span></div><div class='line' id='LC488'>	<span class="p">}</span></div><div class='line' id='LC489'><br/></div><div class='line' id='LC490'>	<span class="sd">/**</span></div><div class='line' id='LC491'><span class="sd">	 * Print the feed content/activities.</span></div><div class='line' id='LC492'><span class="sd">	 *</span></div><div class='line' id='LC493'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC494'><span class="sd">	 *</span></div><div class='line' id='LC495'><span class="sd">	 * @return void</span></div><div class='line' id='LC496'><span class="sd">	 */</span></div><div class='line' id='LC497'>	<span class="k">function</span> <span class="nf">get_rss_content</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC498'>		<span class="k">foreach</span><span class="p">(</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">activities</span> <span class="k">as</span> <span class="nv">$item</span> <span class="p">)</span></div><div class='line' id='LC499'>			<span class="k">echo</span> <span class="nv">$item</span><span class="p">;</span></div><div class='line' id='LC500'>	<span class="p">}</span></div><div class='line' id='LC501'><br/></div><div class='line' id='LC502'>	<span class="sd">/**</span></div><div class='line' id='LC503'><span class="sd">	 * Print the feed footer.</span></div><div class='line' id='LC504'><span class="sd">	 *</span></div><div class='line' id='LC505'><span class="sd">	 * @since 0.1</span></div><div class='line' id='LC506'><span class="sd">	 *</span></div><div class='line' id='LC507'><span class="sd">	 * @return void</span></div><div class='line' id='LC508'><span class="sd">	 */</span></div><div class='line' id='LC509'>	<span class="k">function</span> <span class="nf">get_rss_footer</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC510'>	<span class="cp">?&gt;</span><span class="x"></span></div><div class='line' id='LC511'><span class="x">&lt;/channel&gt;</span></div><div class='line' id='LC512'><span class="x">&lt;/rss&gt;</span></div><div class='line' id='LC513'><span class="x">	</span><span class="cp">&lt;?php</span></div><div class='line' id='LC514'>	<span class="p">}</span></div><div class='line' id='LC515'><span class="p">}</span></div><div class='line' id='LC516'><br/></div><div class='line' id='LC517'><span class="c1">// Init</span></div><div class='line' id='LC518'><span class="nv">$feed</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Google_Plus_Feed</span><span class="p">();</span></div></pre></div><div class="cf"><p class="gist-meta"><a href="https://gist.github.com/raw/1496148/google-plus-feed.php">RAW</a> · <a class="gist-download" href="https://gist.github.com/gists/1496148/download">Download</a> · <a href="https://gist.github.com/1496148">Gist@GitHub</a></p></div></p>
<p>Das obige Page Template sollte mit jedem Theme kompatibel sein und muss ins das Themeverzeichnis des aktuellen Themes kopiert werden.<br />
Bei Twenty Eleven wäre das zum Beispiel <code class="path">/wp-content/themes/twentyeleven/google-plus-feed.php</code>.</p>
<p>Für die Einrichtung des Feeds werden ein Google+ API Key sowie die Google+ User ID benötigt:</p>
<h4>Google+ API Key</h4>
<p>Wie jede API von Google benötigt auch die Google+ API einen API Key, welcher vorher generiert werden muss.</p>
<div id="attachment_572" class="wp-caption aligncenter" style="width: 385px"><img src="http://wpgrafie.de/files/2011/12/google-plus-apiconsole.png" alt="Google Plus API Console" title="Google Plus API Console" width="375" height="146" class="size-full wp-image-572" /><p class="wp-caption-text">Google+ API freischalten</p></div>
<p>Generiert kann sich dieser in der <em>Google APIs Console</em> unter <strong><a href="https://code.google.com/apis/console/">code.google.com/apis/console/</a></strong>. Unter dem Tab <em>Services</em> muss dazu der zugehörige Regler auf <em>On</em> gesetzt werden.</p>
<h4>Google+ User ID</h4>
<p>Die User ID des Google+ Profils kann aus der jeweiligen URL zum Profil herausgefiltert werden, ein Beispiel:</p>
<p style="text-align:center"><code class="string">https://plus.google.com/u/0/<strong>101675293278434581718</strong>/posts</code></p>
<p><em>101675293278434581718</em> wären in diesem Fall die User ID.</p>
<h4>Einrichtung</h4>
<p>Wenn API Key und User ID vorhanden sind, kann der Feed eingerichtet werden.<br />
Dazu ins Backend wechseln und eine neue Seite einrichten, Titel und Inhalt (= Beschreibung des Feeds, ohne HTML Tags) festlegen und in der Metabox <em>Attribute</em> das Template <em>Google+ Feed</em> definieren.<br />
Anschließend müssen der Key und die ID übergeben werden, dazu gibt es zwei Möglichkeiten:</p>
<ol>
<li>Die heruntergeladene Datei <code class="path">google-plus-feed.php</code> öffnen und die Variablen <code>private $user_id = '';</code> und <code>private $api_key = ''</code> mit den jeweiligen Werten belegen.</li>
<li>Die zweite Möglichkeit geht über die benutzerdefinierten Feldern (ggf. über Reiter <em>Optionen einblenden</em> aktivieren). Dafür müssen zwei neue Felder angelegt werden, einmal <code class="string">gplus_feed_user_id</code> mit dem Wert der User ID und einmal <code class="string">gplusfeed_api_key</code> mit dem Wert des API Keys.</li>
</ol>
<p>Speichern nicht vergessen und die Grundeinrichtung ist getan. Der Feed sollte jetzt erreichbar sein.</p>
<h4>Zusätzliche Einstellungen</h4>
<p>Weitere Anpassung an den RSS Feed können durch die Variable <code>$this->settings</code> getätigt werden. Dazu sollte sich die Methode <code>set_settings()</code> zu Rate gezogen werden.</p>
<pre>
/**
 * Set custom feed settings.
 *
 *  - limit: How many activities should be displayed in feed
 *  - cache_time: How long the feed should be cached
 *  - language: The language of the feed
 *  - update_period: See http://web.resource.org/rss/1.0/modules/syndication/
 *  - update_frequency: See http://web.resource.org/rss/1.0/modules/syndication/
 *
 * @since 0.1
 *
 * @return array Settings saved in an array.
 */
function set_settings() {
	$this->settings = wp_parse_args(
		array(
			'limit' => 10,
			'cache_time' => 300,
			'language' => 'de',
			'update_period' => 'hourly',
			'update_frequency' => 1
		),
		$this->settings
	);
}
</pre>
<h4>Formatierung</h4>
<p>Die Google+ API gibt als Titel nur die ersten paar Wörter aus.<br />
Dies kann aber umgangen werden, wenn der Google+ Post mit einer in Fett formatierten Zeile gefolgt von zwei Absätzen beginnt, ein Bespiel:</p>
<div id="attachment_574" class="wp-caption aligncenter" style="width: 569px"><img src="http://wpgrafie.de/files/2011/12/google-plus-feed-post-formatierung.png" alt="Google Plus Feed Post Formatierung" title="Google Plus Feed Post Formatierung" width="559" height="283" class="size-full wp-image-574" /><p class="wp-caption-text">Google+ Formatierung für die Feeddarstellung</p></div>
<h4>Feedback</h4>
<p>Feedback, Verbesserungsvorschläge, Probleme oder sonstige Fragen können gerne als Kommentar abgegeben werden und werden dort natürlich von mir beantwortet.</p>
]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/schnipsel/page-template-google-plus-feed/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Sicheres Weiterleiten mit der Funktion wp_safe_redirect()</title>
		<link>http://wpgrafie.de/535/sicheres-weiterleiten-funktion/</link>
		<comments>http://wpgrafie.de/535/sicheres-weiterleiten-funktion/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 07:45:46 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
				<category><![CDATA[WordPress Tipps & Tricks]]></category>
		<category><![CDATA[Weiterleitung]]></category>

		<guid isPermaLink="false">http://wpgrafie.de/?p=535</guid>
		<description><![CDATA[<p>WordPress bietet verschiedene Funktionen an, um den Benutzer nach bestimmten Aktionen zu einer Seiten zurück- oder weiterzuleiten.</p>

<p>Gemeint sind die beiden Funktionen <code class="string">wp_redirect()</code> und <code class="string">wp_safe_redirect()</code></p>]]></description>
			<content:encoded><![CDATA[<p itemprop="description">WordPress bietet verschiedene Funktionen an, um den Benutzer nach bestimmten Aktionen zu einer Seite zurück- oder weiterzuleiten.</p>
<p><img src="http://wpgrafie.de/files/2011/12/wordpress-weiterleitung.jpg" alt="wordpress-weiterleitung" title="wordpress-weiterleitung" width="300" height="240" class="aligncenter size-full wp-image-539" /></p>
<p>In der Datei <code class="path">/wp-includes/pluggable.php</code> ist die Funktion <code class="string">wp_redirect()</code> zu finden. Diese kann zwei Argumente aufnehmen, die Zieladresse und der optionale <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">HTTP Status Code</a>.</p>
<pre>
/**
 * Redirects to another page.
 *
 * @since 1.5.1
 * @uses apply_filters() Calls 'wp_redirect' hook on $location and $status.
 *
 * @param string $location The path to redirect to
 * @param int $status Status code to use
 * @return bool False if $location is not set
 */
function wp_redirect( $location, $status = 302 ) {
	global $is_IIS;

	$location = apply_filters( 'wp_redirect', $location, $status );
	$status = apply_filters( 'wp_redirect_status', $status, $location );

	if ( ! $location ) // allows the wp_redirect filter to cancel a redirect
		return false;

	$location = wp_sanitize_redirect( $location );

	if ( !$is_IIS &#038;&#038; php_sapi_name() != 'cgi-fcgi' )
		status_header( $status );

	header( "Location: $location", true, $status );
}
</pre>
<p>Mit <code>wp_redirect( 'http://wpgrafie.de/wp-admin/' )</code> könnte somit ganz einfach zu <em>http://wpgrafie.de/wp-admin/</em> weitergeleitet werden.</p>
<p>Dank zwei existierenden Filtern kann die Zieladresse sowie der Status Code noch nachträglich geändert werden. So können Adressen vor der Weiterleitung überprüft werden, zum Beispiel um nur lokale Weiterleitungen zu erlauben.</p>
<p>Um diese Arbeit zu vereinfachen, stellt WordPress eine weitere Funktion names <code class="string">wp_save_redirect()</code> bereit.</p>
<pre>
/**
 * Performs a safe (local) redirect, using wp_redirect().
 *
 * Checks whether the $location is using an allowed host, if it has an absolute
 * path. A plugin can therefore set or remove allowed host(s) to or from the
 * list.
 *
 * If the host is not allowed, then the redirect is to wp-admin on the siteurl
 * instead. This prevents malicious redirects which redirect to another host,
 * but only used in a few places.
 *
 * @since 2.3
 * @uses wp_validate_redirect() To validate the redirect is to an allowed host.
 *
 * @return void Does not return anything
 **/
function wp_safe_redirect( $location, $status = 30 2) {

	// Need to look at the URL the way it will end up in wp_redirect()
	$location = wp_sanitize_redirect( $location );

	$location = wp_validate_redirect( $location, admin_url() );

	wp_redirect( $location, $status );
}
</pre>
<p>Wird nun <code>wp_safe_redirect( 'http://example.de/wp-admin/file.php' )</code> genutzt, wobei die WordPress Installation unter <em>http://wpgrafie.de/wp-admin/file.php</em> erreichbar ist, wird nicht zu der angegeben Adresse geleitet.<br />
Der Grund dafür ist, dass die Zieladresse nicht im Bereich von <code class="string">home_url()</code> (wäre <em>http://wpgrafie.de/</em>) liegt. Dies wird mittels <code class="string">wp_validate_redirect()</code> geprüft.<br />
Die Funktion <code class="string">wp_validate_redirect()</code> bekommt als zweites Argument <code class="string">admin_url()</code> übermittelt. Wird eine fehlerhafte Zieladresse ermittelt, wird in diesem Fall zum Dashboard weitergeleitet.</p>
<p>Wann lohnt sich nun <code class="string">wp_redirect()</code> und wann <code class="string">wp_safe_redirect()</code>?<br />
Die erste Variante ist für eine Weiterleitung geeignet, wenn der Host der Zieladresse bekannt ist bzw. ihm vertraut werden kann.<br />
Muss hingegen auf den Referrer für eine Weiterleitung gesetzt werden, sollte der Einsatz von <code class="string">wp_safe_redirect()</code> bevorzugt werden.</p>
<p class="credits">Bildquelle: <a href="http://www.flickr.com/people/70561195@N00/">GirlieMac</a> / flickr.com, Lizenz: CC BY 2.0.</p>
<br/><br/><h3>Kategorieähnliche Artikel</h3><ul><li><a href="http://wpgrafie.de/268/wordpress-codeschnipsel-speichern/"><span>Wohin mit den WordPress Codeschnipsel?</span></a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/535/sicheres-weiterleiten-funktion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress 3.3 Release Candidate 3 veröffentlicht</title>
		<link>http://wpgrafie.de/526/wordpress-3-3-rc-3/</link>
		<comments>http://wpgrafie.de/526/wordpress-3-3-rc-3/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 00:42:26 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
				<category><![CDATA[WordPress Release]]></category>

		<guid isPermaLink="false">http://wpgrafie.de/?p=526</guid>
		<description><![CDATA[<p>Am heutigen Morgen wurde die wohl letzte Version vor der finalen WordPress 3.3 Version veröffentlicht.</p>

<p>Meine News werden immer kürzer, was auch daran liegt, dass es immer weniger Änderungen gibt. Es kamen nochmal <a href="http://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&#038;mode=stop_on_copy&#038;rev=19587&#038;stop_rev=19568&#038;limit=200&#038;verbose=on">19 Änderungen</a> zum 3.3 Zweig hinzu.
Beachtet werden sollte, dass die Funktion <code class="string">wp_add_script_before()</code> wieder entfernt wurde. Es soll weiter auf <code class="string">wp_localize_script()</code> gesetzt werden.</p>

<p>WordPress 3.3 RC 3 kann als Paket <a href="http://wordpress.org/wordpress-3.3-RC3.zip">hier heruntergeladen</a> werden.</p>

<p>Derzeit steht einem finalen Release am Montag nichts im Wege. Hoffen wir, dass dies so bleibt.</p>

<p><a href="http://wordpress.org/news/2011/12/wordpress-3-3-rc3/">Offizieller Artikel auf wordpress.org</a>.</p>]]></description>
			<content:encoded><![CDATA[<p itemprop="description">Am heutigen Morgen wurde die wohl letzte Version vor der finalen WordPress 3.3 Version veröffentlicht.</p>
<p>Meine News werden immer kürzer, was auch daran liegt, dass es immer weniger Änderungen gibt. Es kamen nochmal <a href="http://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&#038;mode=stop_on_copy&#038;rev=19587&#038;stop_rev=19568&#038;limit=200&#038;verbose=on">19 Änderungen</a> zum 3.3 Zweig hinzu.<br />
Beachtet werden sollte, dass die Funktion <code class="string">wp_add_script_before()</code> wieder entfernt wurde. Es soll weiter auf <code class="string">wp_localize_script()</code> gesetzt werden.</p>
<p>WordPress 3.3 RC 3 kann als Paket <a href="http://wordpress.org/wordpress-3.3-RC3.zip">hier heruntergeladen</a> werden.</p>
<p>Derzeit steht einem finalen Release am Montag nichts im Wege. Hoffen wir, dass dies so bleibt.</p>
<p class="int-links" style="clear:both;"><a href="http://wordpress.org/news/2011/12/wordpress-3-3-rc3/">Offizieller Artikel auf wordpress.org</a>.</p>
<br/><br/><h3>Kategorieähnliche Artikel</h3><ul><li><a href="http://wpgrafie.de/271/wordpress-3-3-beta-2/"><span>WordPress 3.3 Beta 2 veröffentlicht</span></a></li><li><a href="http://wpgrafie.de/374/wordpress-3-3-beta-4/"><span>WordPress 3.3 Beta 4 veröffentlicht</span></a></li><li><a href="http://wpgrafie.de/507/wordpress-3-3-rc-2/"><span>WordPress 3.3 Release Candidate 2 veröffentlicht</span></a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/526/wordpress-3-3-rc-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 3.3 Release Candidate 2 veröffentlicht</title>
		<link>http://wpgrafie.de/507/wordpress-3-3-rc-2/</link>
		<comments>http://wpgrafie.de/507/wordpress-3-3-rc-2/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 05:51:39 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
				<category><![CDATA[WordPress Release]]></category>

		<guid isPermaLink="false">http://wpgrafie.de/?p=507</guid>
		<description><![CDATA[<p>Ganz still und heimlich wurde ein zweiter Release Candidate für WordPress 3.3 freigegeben.</p>

<p>Insgesamt gab es nochmal <a href="http://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&#038;mode=stop_on_copy&#038;rev=19567&#038;stop_rev=19532&#038;limit=200&#038;verbose=on">35 Änderungen</a>.
Dazu gehörte u.a. das Optimieren der <strike>Admin Bar</strike> Toolbar oder das <a href="https://plus.google.com/108232521223625019726/posts/RFaCT4RQ5c1">entfernen der Filter</a>, um Shortcodes in Widgets zu parsen.</p>

<p>WordPress 3.3 RC 2 kann als Paket <a href="http://wordpress.org/wordpress-3.3-RC2.zip">hier heruntergeladen</a> werden.</p>

<p><a href="http://wordpress.org/news/2011/12/wordpress-3-3-release-candidate-2/">Offizieller Artikel auf wordpress.org</a>.</p>]]></description>
			<content:encoded><![CDATA[<p itemprop="description">Heute wurde ein zweiter Release Candidate für WordPress 3.3 freigegeben.</p>
<p>Insgesamt gab es nochmal <a href="http://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&#038;mode=stop_on_copy&#038;rev=19567&#038;stop_rev=19532&#038;limit=200&#038;verbose=on">35 Änderungen</a>.<br />
Dazu gehörte u.a. das Optimieren der <strike>Admin Bar</strike> Toolbar oder das <a href="https://plus.google.com/108232521223625019726/posts/RFaCT4RQ5c1">entfernen der Filter</a>, um Shortcodes in Widgets zu parsen.</p>
<p>WordPress 3.3 RC 2 kann als Paket <a href="http://wordpress.org/wordpress-3.3-RC2.zip">hier heruntergeladen</a> werden.</p>
<p>Für Entwickler: Im <a href="http://wpdevel.wordpress.com/">Entwickler Blog</a> wird über verschiedene (API) Änderungen informiert.</p>
<p class="int-links" style="clear:both;"><a href="http://wordpress.org/news/2011/12/wordpress-3-3-release-candidate-2/">Offizieller Artikel auf wordpress.org</a>.</p>
<br/><br/><h3>Kategorieähnliche Artikel</h3><ul><li><a href="http://wpgrafie.de/435/wordpress-3-3-rc-1/"><span>WordPress 3.3 Release Candidate 1 veröffentlicht</span></a></li><li><a href="http://wpgrafie.de/374/wordpress-3-3-beta-4/"><span>WordPress 3.3 Beta 4 veröffentlicht</span></a></li><li><a href="http://wpgrafie.de/251/wordpress-3-3-beta-1/"><span>WordPress 3.3 Beta 1 veröffentlicht</span></a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/507/wordpress-3-3-rc-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pluginvorstellung: Admin Bar Backend Search</title>
		<link>http://wpgrafie.de/478/pluginvorstellung-admin-bar-backend-search/</link>
		<comments>http://wpgrafie.de/478/pluginvorstellung-admin-bar-backend-search/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 07:00:24 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
				<category><![CDATA[WordPress Plugins]]></category>

		<guid isPermaLink="false">http://wpgrafie.de/?p=478</guid>
		<description><![CDATA[<p itemprop="description">Mit Hilfe des Plugins „Admin Bar Backend Search“ werden alle Suchformulare aus der Administrationsoberfläche in eine Suche, platziert in der Admin Bar, zusammengefasst.</p>
<p>„Admin Bar Backend Search“ ist mein erstes Plugin für <strong>WordPress 3.3</strong>.
Die <a href="https://plus.google.com/b/108232521223625019726/108232521223625019726/posts/WjHnTY5xmSx">Idee dazu kam von Sergej</a>, welche ich aufgegriffen und weiter ausgebaut habe.</p>]]></description>
			<content:encoded><![CDATA[<p itemprop="description">Mit Hilfe des Plugins „Admin Bar Backend Search“ werden alle Suchformulare aus der Administrationsoberfläche in eine Suche, platziert in der Admin Bar, zusammengefasst.</p>
<div id="attachment_480" class="wp-caption aligncenter" style="width: 502px"><img src="http://wpgrafie.de/files/2011/12/admin-backend-search.png" alt="Admin Bar Backend Search" title="Admin Bar Backend Search" width="492" height="445" class="size-full wp-image-480" /><p class="wp-caption-text">Das Plugin „Admin Bar Backend Search“ im Einsatz</p></div>
<p>„Admin Bar Backend Search“ ist mein erstes Plugin für <strong>WordPress 3.3</strong>.<br />
Die <a href="https://plus.google.com/b/108232521223625019726/108232521223625019726/posts/WjHnTY5xmSx">Idee dazu kam von Sergej</a>, welche ich aufgegriffen und weiter ausgebaut habe.</p>
<p>Mit Hilfe des Plugins ist möglich aus der Admin Bar heraus in folgenden Typen zu suchen:</p>
<ul>
<li>Artikel</li>
<li>Seiten</li>
<li>Eigene Inhaltsarten (Custom Post Types)</li>
<li>Medien</li>
<li>Links</li>
<li>Kommentare</li>
<li>Benutzer</li>
<li>Installierte Themes bzw. Plugins</li>
<li>Neue Themes bzw. Plugins</li>
<li>Im Netzwerk Administrationsbereich: Benutzer, Seiten und ebenfalls Plugins und Themes.</li>
</ul>
<p class="button-to-page"><a href="http://wpgrafie.de/wp-plugins/admin-bar-backend-search/">Weitere Pluginbeschreibung und Download</a></p>
<br/><br/><h3>Kategorieähnliche Artikel</h3><ul><li><a href="http://wpgrafie.de/143/wpseo-plugin-review/"><span>Review: wpSEO 3.0 &#8211; SEO Plugin startet in eine neue Runde</span></a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/478/pluginvorstellung-admin-bar-backend-search/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress 3.3 Release Candidate 1 veröffentlicht</title>
		<link>http://wpgrafie.de/435/wordpress-3-3-rc-1/</link>
		<comments>http://wpgrafie.de/435/wordpress-3-3-rc-1/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 07:15:58 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
				<category><![CDATA[WordPress Release]]></category>

		<guid isPermaLink="false">http://wpgrafie.de/?p=435</guid>
		<description><![CDATA[<p>Nach vier Beta-Versionen gibt es heute den ersten Release Candidate für die kommende WordPress Version.</p>

<p>Erst kam <a href="http://wpgrafie.de/251/wordpress-3-3-beta-1/">eine Beta</a>, dann <a href="http://wpgrafie.de/271/wordpress-3-3-beta-2/">eine Zweite</a>, <a href="http://wpgrafie.de/323/wordpress-3-3-beta-3/">eine Dritte</a> durfte auch nicht fehlen und die <a href="http://wpgrafie.de/374/wordpress-3-3-beta-4/">vierte Beta</a> war die letzte Beta.
Denn heute, 1 Woche später, gibt es den lang ersehnten ersten Release Candidate.</p>

<p>Zwischen der letzten Beta und der heutigen Version gab es diesmal <em>nur</em> <a href="http://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&#038;mode=stop_on_copy&#038;rev=19531&#038;stop_rev=19447&#038;limit=200&#038;verbose=on">84 Änderungen</a></p>

<ul>
	<li>Hauptaugenmerk bekamen die Hilfe Tabs, aktualisierte Texte und Anpassungen an die neue API.</li>
	<li>Die letzten Bugs in der Widget API wurden (hoffentlich) beseitigt.</li>
	<li>Ein weiteres Feature bekam das Admin Menü. Dieses wird nun mit ARIA Attributen unterstützt. (<a href="http://core.trac.wordpress.org/ticket/19394">Ticket #19394</a>).</li>
</ul>

<p>In <em>Release Candidate</em> steckt schon das Wort <em>Release</em>, lange wird es also nicht mehr dauern und dann seht WordPress 3.3 für den produktiven Einsatz bereit. Geplant ist ein Datum vor dem <a href="http://wpdevel.wordpress.com/2011/11/29/3-3-status-update/">13. Dezember</a>.</p>

<p>WordPress 3.3 RC 1 kann als Paket <a href="http://wordpress.org/wordpress-3.3-RC1.zip">hier heruntergeladen</a> werden.</p>

<p><a href="http://wordpress.org/news/2011/12/wordpress-3-3-release-candidate-1/">Offizieller Artikel auf wordpress.org</a>.</p>]]></description>
			<content:encoded><![CDATA[<p itemprop="description">Nach vier Beta-Versionen gibt es heute den ersten Release Candidate für die kommende WordPress Version.</p>
<p><img src="http://wpgrafie.de/files/2011/12/admin-menu-sub.png" alt="admin-menu-sub" title="admin-menu-sub" width="250" height="439" class="alignright size-full wp-image-442" /></p>
<p>Erst kam <a href="http://wpgrafie.de/251/wordpress-3-3-beta-1/">eine Beta</a>, dann <a href="http://wpgrafie.de/271/wordpress-3-3-beta-2/">eine Zweite</a>, <a href="http://wpgrafie.de/323/wordpress-3-3-beta-3/">eine Dritte</a> durfte auch nicht fehlen und die <a href="http://wpgrafie.de/374/wordpress-3-3-beta-4/">vierte Beta</a> war die letzte Beta.<br />
Denn heute, 1 Woche später, gibt es den lang ersehnten ersten Release Candidate.</p>
<p>Zwischen der letzten Beta und der heutigen Version gab es diesmal <em>nur</em> <a href="http://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&#038;mode=stop_on_copy&#038;rev=19531&#038;stop_rev=19447&#038;limit=200&#038;verbose=on">84 Änderungen</a></p>
<ul>
<li>Hauptaugenmerk bekamen die Hilfe Tabs, aktualisierte Texte und Anpassungen an die neue API.</li>
<li>Die letzten Bugs in der Widget API wurden (hoffentlich) beseitigt.</li>
<li>Ein weiteres Feature bekam das Admin Menü. Dieses wird nun mit ARIA Attributen unterstützt. (<a href="http://core.trac.wordpress.org/ticket/19394">Ticket #19394</a>).</li>
<li>Die Admin Bar wird nun mit weiteren Icons unterstützt. Siehe dazu meinen Beitrag <a href="http://wpgrafie.de/378/wordpress-admin-header-entwicklung/">„Die Entwicklung hinter dem WordPress Admin Header“</a>.
</ul>
<p>In <em>Release Candidate</em> steckt schon das Wort <em>Release</em>, lange wird es also nicht mehr dauern und dann seht WordPress 3.3 für den produktiven Einsatz bereit. Geplant ist ein Datum vor dem <a href="http://wpdevel.wordpress.com/2011/11/29/3-3-status-update/">13. Dezember</a>.</p>
<p>WordPress 3.3 RC 1 kann als Paket <a href="http://wordpress.org/wordpress-3.3-RC1.zip">hier heruntergeladen</a> werden.</p>
<p class="int-links" style="clear:both;"><a href="http://wordpress.org/news/2011/12/wordpress-3-3-release-candidate-1/">Offizieller Artikel auf wordpress.org</a>.</p>
<br/><br/><h3>Kategorieähnliche Artikel</h3><ul><li><a href="http://wpgrafie.de/374/wordpress-3-3-beta-4/"><span>WordPress 3.3 Beta 4 veröffentlicht</span></a></li><li><a href="http://wpgrafie.de/323/wordpress-3-3-beta-3/"><span>WordPress 3.3 Beta 3 veröffentlicht</span></a></li><li><a href="http://wpgrafie.de/271/wordpress-3-3-beta-2/"><span>WordPress 3.3 Beta 2 veröffentlicht</span></a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/435/wordpress-3-3-rc-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Die Entwicklung hinter dem WordPress Admin Header</title>
		<link>http://wpgrafie.de/378/wordpress-admin-header-entwicklung/</link>
		<comments>http://wpgrafie.de/378/wordpress-admin-header-entwicklung/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 08:00:01 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
				<category><![CDATA[WordPress Gallerie]]></category>

		<guid isPermaLink="false">http://wpgrafie.de/?p=378</guid>
		<description><![CDATA[<p>Eines der neuen Features in WordPress 3.3 wird die Verknüpfung von Admin Header und Admin Bar sein. Doch wie sah der Admin Header eigentlich in WordPress 0.71 aus?</p>

<p>Um einen Einblick in die Entwicklung zu geben, habe ich von jedem WordPress Zweig die ersten 300x920 Pixel genommen und die Unterschiede dokumentiert.</p>]]></description>
			<content:encoded><![CDATA[<p itemprop="description">Eines der neuen Features in WordPress 3.3 wird die Verknüpfung von Admin Header und Admin Bar sein. Doch wie sah der Admin Header eigentlich in WordPress 0.71 aus?</p>
<p>Mit fast jeder Version hat sich der Kopf der Administrationsoberfläche geändert. Mal wurden Elemente hinzugefügt, mal wurden farbliche Akzente gesetzt.<br />
Doch nicht jeder hat mit den ersten Versionen von WordPress gearbeitet und weiß noch, wie sich die Geschichte entwickelt hat. Außer vielleicht <a href="http://www.perun.net/2011/10/10/was-war-deine-erste-wordpress-version/">Vladimir</a>.<br />
Ich selbst hatte meinen ersten Kontakt mit WordPress auch erst im Jahr 2007, muss also Version 2.1, 2.2 oder 2.3 gewesen sein.</p>
<p>Aufgrund meiner Trac Aktivitäten weiß ich aber mittlerweile, wie sich der Admin Header von Version zu Version verändert hat.<br />
Um einen Einblick in die Entwicklung zu geben, habe ich von jedem WordPress Zweig die ersten 300&#215;920 Pixel genommen und die Unterschiede dokumentiert.</p>
<div>
<h3>WordPress 0.71</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-0.71.png" alt="" title="WordPress 0.71" width="920" height="300" class="aligncenter size-full wp-image-1430" /><span></span></p>
<p>WordPress 0.71-gold ist die älteste Version, die im <a href="http://wordpress.org/download/release-archive/">Release Archiv</a> geladen werden kann.</p>
<ul>
<li>Minimalistik pur. WordPress war farblich in schwarz und weiß gehalten.</li>
<li>Die Navigationsleiste war unter dem WordPress Logo platziert.</li>
</ul>
</div>
<div>
<h3>WordPress 1.0</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-1.0.png" alt="" title="WordPress 1.0" width="920" height="300" class="aligncenter size-full wp-image-1431" /><span></span></p>
<ul>
<li>In Version 1.0 kam dann etwas Farbe hinzu, unter anderem für das Logo und die Links.</li>
<li>Eine statische Schattengrafik versuchte den Header von der Navigation abzutrennen.</li>
</ul>
</div>
<div>
<h3>WordPress 1.2</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-1.2.png" alt="" title="WordPress 1.2" width="920" height="300" class="aligncenter size-full wp-image-1432" /><span></span></p>
<p>Gegenüber WordPress 1.0 gab es in der Version 1.2 keine Änderungen im Header.</p>
</div>
<div>
<h3>WordPress 1.5</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-1.5.png" alt="" title="WordPress 1.5" width="920" height="300" class="aligncenter size-full wp-image-1433" /><span></span></p>
<ul>
<li>Mit Version 1.5 bekam WordPress das erste Mal sein <em>Dashboard</em>.</li>
<li>Im Header wurde das WordPress Logo durch den Seitennamen ersetzt.</li>
<li>Der <em>View Site</em> Link wechselte von der Navigation neben den Seitennamen.</li>
</ul>
</div>
<div>
<h3>WordPress 2.0</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.0.png" alt="" title="WordPress 2.0" width="920" height="300" class="aligncenter size-full wp-image-1434" /><span></span></p>
<ul>
<li>WordPress 2.0 wurde blau, heißt der Header wurde mit verschiedenen Blautönen unterlegt.</li>
<li>Außerdem fand zum ersten Mal das berüchtigte <em>Howdy</em> Element (zusammen mit den Profillinks) rechts oben seinen Platz. Es ersetzte die Links in der Navigationsleiste</li>
</ul>
<p>Aufgefallen: Das neue WordPress 3.3 Feature <em>Welcome Panel</em> gab es in abgespeckter Version schon in dieser Version.</p>
</div>
<div>
<h3>WordPress 2.1</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.1.png" alt="" title="WordPress 2.1" width="920" height="300" class="aligncenter size-full wp-image-1435" /><span></span></p>
<ul>
<li>Gegenüber der vorherigen Version wurde das Navigationsmenü mit einem Dunkelblau unterlegt.</li>
</ul>
</div>
<div>
<h3>WordPress 2.2</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.2.png" alt="" title="WordPress 2.2" width="920" height="300" class="aligncenter size-full wp-image-1436" /><span></span></p>
<p>Keine Änderungen gab es in WordPress 2.2 bzg. des Headers.</p>
</div>
<div>
<h3>WordPress 2.3</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.3.png" alt="" title="WordPress 2.3" width="920" height="300" class="aligncenter size-full wp-image-1437" /><span></span></p>
<p>Auch Version 2.3 kam mit keinen Änderungen daher.</p>
</div>
<div>
<h3>WordPress 2.5</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.5.png" alt="" title="WordPress 2.5" width="920" height="300" class="aligncenter size-full wp-image-1438" /><span></span></p>
<ul>
<li>Mit WordPress 2.5 wurde der Kopf des Backends farbenfroher, hauptsächlich durch die Farbe orange.</li>
<li>Das Navigationsmenü wurde gesplittet – das <em>Dashboard</em> Element erschien nun als Tab auf einer grauen Leiste über dem Logo.</li>
<li>In der selben Leiste befanden sich auch die Profillinks.</li>
<li>Der <em>Visit Site</em> Link wurde zum Button und das <em>Welcome Panel</em> wurde entfernt.</li>
</ul>
</div>
<div>
<h3>WordPress 2.6</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.6.png" alt="" title="WordPress 2.6" width="920" height="300" class="aligncenter size-full wp-image-1439" /><span></span></p>
<p>Keine wirklichen Änderungen kamen mit Version 2.6, außer, dass der <em>Turbo</em> Link seinen Platz im Header fand. <em>Turbo</em> stand für <a href="http://core.trac.wordpress.org/ticket/6965">Google Gears</a>.</p>
</div>
<div>
<h3>WordPress 2.7</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.7.png" alt="" title="WordPress 2.7" width="920" height="300" class="aligncenter size-full wp-image-1440" /><span></span></p>
<p>Mit dem Redesign in WordPress 2.7 wurde die Administrationsbereich komplett überarbeitet und neu gestaltet.</p>
<ul>
<li>Die Farbe blau wurde durch verschiedene Grautöne ersetzt.</li>
<li>Die Navigation befand sich nun links und die Menü-Unterpunkte waren ohne Seitenwechsel erreichbar.</li>
<li>Im Header war wieder ein WordPress Logo zu finden, daneben der <em>View site</em> Link.</li>
<li>Außerdem wurde eine Dropdown-Menü in den Header eingebaut, welches die „Favoriten“, wie  <em>New Post</em> oder <em>New Page</em> ausgab.</li>
<li>Die Tabs <em>Screen Options</em> und <em>Help</em> wurden eingeführt.</li>
</ul>
</div>
<div>
<h3>WordPress 2.8</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.8.png" alt="" title="WordPress 2.8" width="920" height="300" class="aligncenter size-full wp-image-1441" /><span></span></p>
<p>Die einzige direkte sichtbare Änderung war das <em>View Site</em> Element. Es wurde zu einem Button wieder.<br />
Unter dem Tab <em>Screen Options</em> befand sich allerdings noch die Möglichkeit, dass <em>Dashboard</em> in 1 &#8211; 4 Spalten zu unterteilen.</p>
</div>
<div>
<h3>WordPress 2.9</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-2.9.png" alt="" title="WordPress 2.9" width="920" height="300" class="aligncenter size-full wp-image-1442" /><span></span></p>
<p>In WordPress 2.9 gab es keine Änderungen.</p>
</div>
<div>
<h3>WordPress 3.0</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-3.0.png" alt="" title="WordPress 3.0" width="920" height="300" class="aligncenter size-full wp-image-1443" /><span></span></p>
<p>In WordPress 3.0 wurden WordPress und WordPress MU verbunden.</p>
<ul>
<li>Aus diesem Grund wurde die linke Navigation um die Multisite Elemente erweitert.</li>
<li>Ansonsten ist der Header deutlich heller geworden.</li>
<li>Das <em>View Site</em> Element wurde entfernt.</li>
</ul>
</div>
<div>
<h3>WordPress 3.1</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-3.1.png" alt="" title="WordPress 3.1" width="920" height="300" class="aligncenter size-full wp-image-1444" /><span></span></p>
<ul>
<li>WordPress 3.1 kam mit einer neuen Oberfläche für den Multisite Modus. Deswegen verschwanden die Elemente wieder aus der linken Navigation.</li>
<li>Der Link zur der neuen Oberfläche wurde oben links neben dem Profillink platziert.</li>
</ul>
</div>
<div>
<h3>WordPress 3.2</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-3.2.png" alt="" title="WordPress 3.2" width="920" height="300" class="aligncenter size-full wp-image-1445" /><span></span></p>
<p>Die Admin Bar kam in Version 3.2 zum ersten Mal in Einsatz.</p>
<ul>
<li>Die Admin Bar war mit Links zu häufig genutzten Funktionen gefüllt. Es gab eine Suche, die das Frontend durchsuchte und es gab ein Element für die Profillinks.</li>
<li>Die Profillinks spiegelten sich allerdings auch rechts in einem Dropdown-Menü wieder.</li>
<li>Desweiteren wurde das Navigationsmenü optisch aufgewertet. Anstatt einzelne Boxen gab es nun eine über die gesamte Höhe gezogene Leiste.</li>
<li>Der eigentliche Header mit dem Seitennamen befand sich auch nicht mehr über der Navigation, sondern neben der Navigation und unter der Admin Bar.</li>
<li>Aufgrund der Admin Bar wurde das Dropdown-Menü für die „Favoriten“ entfernt.</li>
</ul>
</div>
<div>
<h3>WordPress 3.3</h3>
<p class="gallery-item"><img src="http://wpgrafie.de/files/2011/11/wordpress-header-3.3.png" alt="" title="WordPress 3.3" width="920" height="300" class="aligncenter size-full wp-image-1446" /><span></span></p>
<p>WordPress 3.3 hat seinen finalen Status noch nicht erreicht, aber die Änderungen bzg. des Headers sind schon so gut wie beendet.</p>
<ul>
<li>In Version 3.3 wird die Admin Bar von Version 3.2 weiter ausgebaut sein. Die neue Admin Bar verbindet jetzt den Header, das Dropdown-Menü und die alte Admin Bar.</li>
<li>Das WordPress Logo ist in die Admin Bar gewandert und bekommt dort ein eigenes Menü mit Unterpunkten, zum Beispiel zu der neuen <em>About WordPress</em> Seite.</li>
<li>Die Benutzerinfos sind in der Admin Bar nach rechts gewandert, sowie es bei Twitter, Google+ und Co zur Zeit ebenfalls strukturiert ist.</li>
<li>In den ersten 300 Pixel ist auch wieder das schon oben erwähnte <em>Welcome Panel</em> zu sehen.</li>
<li>Im Gegensatz den vorherigen Versionen sind die Unterpunkte in der linken Navigation nicht mehr direkt sichtbar. Diese erscheinen erst beim Überfahren mit der Maus.</li>
</ul>
</div>
<h3>Zukunft</h3>
<p>Was wird die Zukunft bringen? Da WordPress 3.3 noch nicht unter die Masse gebracht worden ist, kann noch nicht wirklich gesagt werden, wie der neue Header ankommen wird.<br />
Wird er positiv angenommen wird er vielleicht so bleiben, wenn nicht, wird er passend gemacht.</p>
<p>Aber vielleicht hast du schon einen Blick auf die kommende Version geworfen? Wie findest du die Änderungen? Vielleicht auch im Hinblick auf die Entwicklung seit Version 0.71?</p>
<p>Ich freu mich auf eure Antworten!</p>
]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/378/wordpress-admin-header-entwicklung/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress 3.3 Beta 4 veröffentlicht</title>
		<link>http://wpgrafie.de/374/wordpress-3-3-beta-4/</link>
		<comments>http://wpgrafie.de/374/wordpress-3-3-beta-4/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 01:45:47 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
				<category><![CDATA[WordPress Release]]></category>

		<guid isPermaLink="false">http://wpgrafie.de/?p=374</guid>
		<description><![CDATA[<p>10 Tage nach <a href="http://wpgrafie.de/323/wordpress-3-3-beta-3/">der letzten Beta</a> wurde heute die letzte Beta für den WordPress 3.3 Zweig veröffentlicht.</p>

<p>Zwischen der zweiten und dritten Beta gab es schon 200 Änderungen am Core.
Für die Beta 4 wurden es diesmal noch ein paar mehr. Insgesamt sind es <a href="http://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&#038;mode=stop_on_copy&#038;rev=19447&#038;stop_rev=19225&#038;limit=250&#038;verbose=on">222 Commits</a> geworden, welche die unterschiedlichsten Probleme aufgegriffen und dementsprechend behoben haben.</p>

<p>Zu den herausstechenden Änderungen gehören:</p>
<ul>
	<li>Bugfixes für das Twenty Eleven Theme</li>
	<li>Bugfixes für den Mediauploader (und Thickbox) ( Lässt sich u.a. wieder schließen)</li>
	<li>Weitere Optimierungen für RTL(right to left) Sprachen</li>
	<li>Reaktivierung des RDF Feeds</li>
	<li>Finalisierung des <em>Welcome Panels</em>.</li>
	<li>Finialisierung der <em>About WordPress</em> Seite.</li>
	<li>Optimierung der WordPress Editor API.</li>
	<li>Einführung von <code class="string">wp_no_robots()</code></li>
	<li>Optimierung der Admin Bar API.</li>
	<li>Aktualisierung der jQuery Bibliothek auf Version 1.7.1</li>
	<li>Optimierungen der Accessibility für die Admin Bar und das Admin Menü.</li>
</ul>

<blockquote>
<p>Thought 3 was the last?
Ha ha! Here is Beta 4 --
Better get testing.</p>
</blockquote>

<p>WordPress 3.3 Beta 3 kann als Paket <a href="http://wordpress.org/wordpress-3.3-beta4.zip">hier heruntergeladen</a> werden.</p>

<p><a href="http://wordpress.org/news/2011/11/wordpress-3-3-beta-4/">Offizieller Artikel auf wordpress.org</a>.</p>]]></description>
			<content:encoded><![CDATA[<div id="attachment_387" class="wp-caption alignright" style="width: 251px"><a href="http://wpgrafie.de/files/2011/11/wordpress-features.png"><img src="http://wpgrafie.de/files/2011/11/wordpress-features-241x600.png" alt="wordpress-features" title="wordpress-features" width="241" height="600" class="size-large wp-image-387" /></a><p class="wp-caption-text">Die neue About WordPress Seite listet die Changelog.</p></div>
<p itemprop="description">10 Tage nach <a href="http://wpgrafie.de/323/wordpress-3-3-beta-3/">der letzten Beta</a> wurde heute die letzte Beta für den WordPress 3.3 Zweig veröffentlicht.</p>
<p>Zwischen der zweiten und dritten Beta gab es schon 200 Änderungen am Core.<br />
Für die Beta 4 wurden es diesmal noch ein paar mehr. Insgesamt sind es <a href="http://core.trac.wordpress.org/log/trunk/?action=stop_on_copy&#038;mode=stop_on_copy&#038;rev=19447&#038;stop_rev=19225&#038;limit=250&#038;verbose=on">222 Commits</a> geworden, welche die unterschiedlichsten Probleme aufgegriffen und dementsprechend behoben haben.</p>
<p>Zu den herausstechenden Änderungen gehören:</p>
<ul>
<li>Bugfixes für das Twenty Eleven Theme</li>
<li>Bugfixes für den Mediauploader und Thickbox (Lässt sich u.a. wieder schließen)</li>
<li>Weitere Optimierungen für RTL(right to left) Sprachen</li>
<li>Reaktivierung des RDF Feeds</li>
<li>Finalisierung des <em>Welcome Panels</em>.</li>
<li>Finialisierung der <em>About WordPress</em> Seite.</li>
<li>Optimierung der WordPress Editor API.</li>
<li>Einführung von <code class="string">wp_no_robots()</code></li>
<li>Optimierung der Admin Bar API.</li>
<li>Aktualisierung der jQuery Bibliothek auf Version 1.7.1</li>
<li>Optimierungen der Accessibility für die Admin Bar und das Admin Menü.</li>
</ul>
<blockquote>
<p>Thought 3 was the last?<br />
Ha ha! Here is Beta 4 &#8211;<br />
Better get testing.</p>
</blockquote>
<p>WordPress 3.3 Beta 3 kann als Paket <a href="http://wordpress.org/wordpress-3.3-beta4.zip">hier heruntergeladen</a> werden.</p>
<p>Auch wenn der <a href="http://wpdevel.wordpress.com/version-3-3-project-schedule/">Zeitplan</a> nicht eingehalten werden konnte, ein <a href="http://wpdevel.wordpress.com/2011/11/22/its-that-time-again-in-the-release-cycle/">Relase für dieses Jahr</a> ist definitiv noch im Rennen.</p>
<p class="int-links" style="clear:both;"><a href="http://wordpress.org/news/2011/11/wordpress-3-3-beta-4/">Offizieller Artikel auf wordpress.org</a>.</p>
<br/><br/><h3>Kategorieähnliche Artikel</h3><ul><li><a href="http://wpgrafie.de/251/wordpress-3-3-beta-1/"><span>WordPress 3.3 Beta 1 veröffentlicht</span></a></li><li><a href="http://wpgrafie.de/507/wordpress-3-3-rc-2/"><span>WordPress 3.3 Release Candidate 2 veröffentlicht</span></a></li><li><a href="http://wpgrafie.de/323/wordpress-3-3-beta-3/"><span>WordPress 3.3 Beta 3 veröffentlicht</span></a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/374/wordpress-3-3-beta-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projekt: WordPress Trac Activity</title>
		<link>http://wpgrafie.de/356/wordpress-trac-activity/</link>
		<comments>http://wpgrafie.de/356/wordpress-trac-activity/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 16:14:33 +0000</pubDate>
		<dc:creator>Dominik</dc:creator>
				<category><![CDATA[Intern]]></category>

		<guid isPermaLink="false">http://wpgrafie.de/?p=356</guid>
		<description><![CDATA[<p><em><a href="https://plus.google.com/108232521223625019726">WordPress Trac Activity</a></em> ist ein neues Projekt, welches ich vor Kurzem gestartet habe. Mit <em>Google+ Pages</em> veröffentliche ich dort aktuelle Neuigkeiten aus dem WordPress Core Trac.</p>

<p>Die Google+ Seite heißt <a href="https://plus.google.com/108232521223625019726">WordPress Trac Activity</a> und kann von Google+ Nutzern gerne eingekreist werden. Danach bekommt ihr in eurem Stream direkt die neuesten Infos, die ihr vielleicht sonst nicht bekommen hättet.
Hier im Blog berichte ich meistens nur über fertige Features. In Google+ schreibe ich deshalb auch über den Stand von Features, die noch nicht komplett sind (Beispiel: <a href="https://plus.google.com/108232521223625019726/posts/iKJ95VnN7kz" title="Google+ Link">Feature Pointers</a>), oder aber auch später wieder entfernt werden (Beispiel: <a href="https://plus.google.com/108232521223625019726/posts/UwXAjcTpW2S" title="Google+ Link">Resize Funktion</a>).</p>

<p>Da nicht jeder einen Google+ Account besitzt und vielleicht nicht auf die Informationen verzichten möchte, kann auch gerne denn Feed abonnieren. Diesen habe ich unter <a href="http://wphelper.de/wp-trac-activity">wphelper.de/wp-trac-activity</a> eingerichtet.</p>

<p>Ein <a href="https://plus.google.com/108232521223625019726">Vorbeischauen</a> lohnt also.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://wpgrafie.de/files/2011/11/wordpress-trac-activity-logo-100x100.png" alt="WordPress Trac Activity Logo" title="WordPress Trac Activity Logo" width="100" height="100" class="alignright size-thumbnail wp-image-357" /></p>
<p itemprop="description">WordPress Trac Activity ist ein neues Projekt, welches ich vor Kurzem gestartet habe. Mit Google+ Pages veröffentliche ich dort aktuelle Neuigkeiten aus dem WordPress Core Trac.</p>
<p>Die Google+ Seite heißt <a href="https://plus.google.com/108232521223625019726">WordPress Trac Activity</a> und kann von Google+ Nutzern gerne eingekreist werden. Danach bekommt ihr in eurem Stream direkt die neuesten Infos, die ihr vielleicht sonst nicht bekommen hättet.<br />
Hier im Blog berichte ich meistens nur über fertige Features. In Google+ schreibe ich deshalb auch über den Stand von Features, die noch nicht komplett sind (Beispiel: <a href="https://plus.google.com/108232521223625019726/posts/iKJ95VnN7kz" title="Google+ Link">Feature Pointers</a>), oder aber auch später wieder entfernt werden (Beispiel: <a href="https://plus.google.com/108232521223625019726/posts/UwXAjcTpW2S" title="Google+ Link">Resize Funktion</a>).</p>
<p>Da nicht jeder einen Google+ Account besitzt und vielleicht nicht auf die Informationen verzichten möchte, kann auch gerne denn Feed abonnieren. Diesen habe ich unter <a href="http://wphelper.de/wp-trac-activity">http://wphelper.de/wp-trac-activity</a> eingerichtet.</p>
<p>Ein <a href="https://plus.google.com/108232521223625019726">Vorbeischauen</a> lohnt also.</p>
<br/><br/><h3>Kategorieähnliche Artikel</h3><ul><li><a href="http://wpgrafie.de/1/wpgrafie-online/"><span>wpGrafie.de &#8211; jetzt gehts los</span></a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpgrafie.de/356/wordpress-trac-activity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

