<?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>WPLove</title>
	<atom:link href="http://wplove.se/feed/" rel="self" type="application/rss+xml" />
	<link>http://wplove.se</link>
	<description>Vi älskar WordPress</description>
	<lastBuildDate>Sat, 23 Oct 2010 09:44:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Hur gör jag den bästa integrationen mellan posts och pages?</title>
		<link>http://wplove.se/hur-gor-jag-den-basta-integrationen-mellan-posts-och-pages/</link>
		<comments>http://wplove.se/hur-gor-jag-den-basta-integrationen-mellan-posts-och-pages/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 10:51:00 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Problemlösning]]></category>
		<category><![CDATA[custom post type]]></category>
		<category><![CDATA[iis.se]]></category>
		<category><![CDATA[permalänkar]]></category>
		<category><![CDATA[problemlösning]]></category>
		<category><![CDATA[sidstruktur]]></category>
		<category><![CDATA[single.php]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=130</guid>
		<description><![CDATA[Jag har ett återkommande problem i sajter jag bygger med WordPress, och det är hur man enklast och bäst löser integrationen av poster i sajter som är uppbyggda med sidor. Jag tror att det bästa sättet att illustrera problematiken är att visa, så häng med och se om du kan komma på en smart lösning [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har ett återkommande problem i sajter jag bygger med WordPress, och det är hur man enklast och bäst löser integrationen av poster i sajter som är uppbyggda med sidor.</p>
<p>Jag tror att det bästa sättet att illustrera problematiken är att visa, så häng med och se om du kan komma på en smart lösning på det här problemet!</p>
<p>När vi byggde om <a href="http://www.iis.se">iis.se</a> med WordPress var det logiskt att bygga hela sajten med en hierarkisk struktur av sidor. Det betyder att nästan hela sajten är uppbyggd av sidor, med undersidor och undersidor till undersidor. Men det finns ju vissa typer av innehåll som inte enkelt låter sig göras som sidor. Till exempel har vi pressmeddelanden (<a href="http://www.iis.se/om-se/pressrum/pressmeddelanden">http://www.iis.se/om-se/pressrum/pressmeddelanden</a>).</p>
<p>/om-se/pressrum/pressmeddelanden är just en sida &#8211; en &#8221;page&#8221; &#8211; i strukturen. Men under denna vill jag ju lista alla pressmeddelanden, som är poster &#8211; &#8221;posts&#8221; &#8211; i en viss kategori (logiskt döpt till &#8221;pressmeddelanden&#8221;). Därför har jag använt en plugin som låter mig lista alla poster i en viss kategori med hjälp av en shortcode. Inga problem &#8211; alla pressmeddelanden listas snyggt och prydligt på sidan ovan.</p>
<p>Men &#8211; var kommer jag om jag nu klickar på ett pressmeddelandes rubrik? Jo, eftersom ett pressmeddelande är en post och inte en sida kommer jag till postens permalänk, t.ex. <a href="http://www.iis.se/pressmeddelanden/mer-generos-begransning-mot-free">http://www.iis.se/pressmeddelanden/mer-generos-begransning-mot-free</a>. Som du ser har vi nu lämnat sajtstrukturen bakom oss och slängts ut i nån slags ingen-mans-land rent sajthierakiskt. Till exempel kan vi inte längre se var i sajten vi befinner oss eftersom både huvud- och undernavigationen satts ur spel.</p>
<p>Jag hade naturligtvis mycket hellre sett att permalänken till det pressmeddelandet varit &#8221;/om-se/pressrum/pressmeddelanden/mer-generos-begransning-mot-free&#8221;. Även om det är en bisarrt lång permalänk är det också en semantiskt korrekt länk, och en tydlig fingervisning om var i strukturen man befinner sig. Men det låter sig inte göras!</p>
<p>Jag testade ett par plugin för att hacka om permalänkarna för poster så att de verkligen visades som om de låg på &#8221;rätt&#8221; ställe &#8211; men förutom att det var en hackig lösning funkade det inte fullt ut. Posten laddas fortfarande med &#8221;single.php&#8221; vilket gör att man helt tappar möjligheten att markera i navigationsträdet till vänster (som är en wp_list_pages) eftersom man inte längre befinner sig inom en sidstruktur!</p>
<p>Samma, eller liknande problem, har jag nu fått i de fall jag vill bygga sajter med Custom Post Type. Om jag vill låta en samling poster ligga på ett visst ställe i en sidstruktur verkar det helt enkelt inte vara möjligt att lösa &#8211; åtminstone inte på något sätt som jag hittat än.</p>
<p>Kan du förstå problematiken? Och ännu intressantare &#8211; har du något förslag på lösning?</p>
<p>/M;</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/hur-gor-jag-den-basta-integrationen-mellan-posts-och-pages/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Plugin: Simple History ger dig koll på användarna</title>
		<link>http://wplove.se/plugin-simple-history-ger-dig-koll-pa-anvandarna/</link>
		<comments>http://wplove.se/plugin-simple-history-ger-dig-koll-pa-anvandarna/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 07:19:39 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[redaktion]]></category>
		<category><![CDATA[simple history]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=123</guid>
		<description><![CDATA[Många WP-sajter drivs av flera användare. En del drivs faktiskt av väldigt många. I de fall en sajt redigeras av en hel redaktion kan det vara plågsamt att inte enkelt kunna hålla koll på vem som uppdaterat vad. Det är här pluginet &#8221;Simple History&#8221; kommer in. Detta plugin ger dig full koll på vad alla [...]]]></description>
			<content:encoded><![CDATA[<p>Många WP-sajter drivs av flera användare. En del drivs faktiskt av väldigt många. I de fall en sajt redigeras av en hel redaktion kan det vara plågsamt att inte enkelt kunna hålla koll på vem som uppdaterat vad. Det är här pluginet &#8221;<a href="http://wordpress.org/extend/plugins/simple-history/">Simple History</a>&#8221; kommer in.</p>
<p><a rel="attachment wp-att-125" href="http://wplove.se/plugin-simple-history-ger-dig-koll-pa-anvandarna/simplehistory/"><img class="alignnone size-full wp-image-125" title="simplehistory" src="http://wplove.se/wordpress/wp-content/uploads/simplehistory.png" alt="" width="481" height="445" /></a></p>
<p>Detta plugin ger dig full koll på vad alla användare pysslar med när de är inloggade i WP-Admin. Du kan se vem som ändrar eller skapar sidor och inlägg, vem som installerar plugin, laddar upp filer, och så vidare. Det här är ovärderligt för oss som har många användare som får logga in på eget initiativ och göra ändringar i en webbplats.</p>
<p>Eller: Det är alltid bra att veta vem man ska peka finger åt. :)</p>
<p><a href="http://wordpress.org/extend/plugins/simple-history/">Ladda ner Simple History från WordPress.org</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/plugin-simple-history-ger-dig-koll-pa-anvandarna/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plugin: IDNA ger dig fullt stöd för IDN-domäner</title>
		<link>http://wplove.se/plugin-idna-ger-dig-fullt-stod-for-idn-domaner/</link>
		<comments>http://wplove.se/plugin-idna-ger-dig-fullt-stod-for-idn-domaner/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 14:38:21 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Plugins]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=119</guid>
		<description><![CDATA[När man letar lediga domäner är det ofta svårt att hitta rätt namn som är ledigt &#8211; om man inte köper en IDN-domän vill säga. IDN-domäner, det vill säga domännamn som innehåller fler tecken än de &#8221;vanliga&#8221; är oftare lediga än klassiska domännamn. Kruxet är att en del applikationer inte riktigt fått stöd för IDN, [...]]]></description>
			<content:encoded><![CDATA[<p>När man letar lediga domäner är det ofta svårt att hitta rätt namn som är ledigt &#8211; om man inte köper en IDN-domän vill säga. IDN-domäner, det vill säga domännamn som innehåller fler tecken än de &#8221;vanliga&#8221; är oftare lediga än klassiska domännamn. Kruxet är att en del applikationer inte riktigt fått stöd för IDN, och WordPress är en av dem.</p>
<p>Om du har en IDN-domän, till exempel &#8221;räksmörgås.se&#8221; så låter WordPress dig inte ange &#8221;räksmörgås.se&#8221; som URL i inställningarna utan konverterar glatt domännamnet till den klassiska motsvarigheten, den rent tekniska domänen som anges i det som kallas &#8221;<a href="http://sv.wikipedia.org/wiki/Punycode">Punycode</a>&#8221;. I fallet med &#8221;räksmörgås.se&#8221; skulle WordPress istället leda alla besökare till &#8221;xn--rksmrgs-5wao1o.se&#8221; &#8211; inte direkt lika catchy.</p>
<p>Tack och lov finns det enkla pluginet IDNA som låter dig ange &#8221;räksmörgås.se&#8221; som domännamn på din sajt, och som inte leder besökarna till Punycode-versionen av domännamnet.</p>
<p><a href="http://wordpress.org/extend/plugins/idna/">Ladda ner IDNA från WordPress.org</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/plugin-idna-ger-dig-fullt-stod-for-idn-domaner/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Custom Post Types i WordPress 3.0</title>
		<link>http://wplove.se/custom-post-types-i-wordpress-3-0/</link>
		<comments>http://wplove.se/custom-post-types-i-wordpress-3-0/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 08:50:06 +0000</pubDate>
		<dc:creator>David Paulsson</dc:creator>
				<category><![CDATA[Mer än blogg]]></category>
		<category><![CDATA[Temautveckling]]></category>
		<category><![CDATA[3.0]]></category>
		<category><![CDATA[Coda slider]]></category>
		<category><![CDATA[custom post type]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=95</guid>
		<description><![CDATA[Låter det här bekant? ”Du går in I ’Posts’ och så väljer du kategorin ’kampanj’ innan du klickar på ’Publish’, då hamnar inlägget rätt. Men bocka inte i någon annan kategori, då kan inlägget hamna någon annanstans. Och så får du inte fylla i något där det står ’Custom fields’ det använder du bara när [...]]]></description>
			<content:encoded><![CDATA[<p>Låter det här bekant?</p>
<blockquote><p>”Du går in I ’Posts’ och så väljer du kategorin ’kampanj’ innan du klickar på ’Publish’, då hamnar inlägget rätt. Men bocka inte i någon annan kategori, då kan inlägget hamna någon annanstans. Och så får du inte fylla i något där det står ’Custom fields’ det använder du bara när du ska lägga in en ny …”</p></blockquote>
<p>och så vidare. Skulle det inte kännas enklare att istället be kunden gå till ”kampanj” direkt, istället för att välja en speciell kategori när inlägget ska publiceras?</p>
<h2>Säg hej till Custom Post Types i WordPress 3.0!</h2>
<p>I det här inlägget tänkte jag visa hur vi kan göra en kampanj-yta med hjälp av <a href="http://www.ndoherty.biz/2009/10/coda-slider-2/">Coda slider</a> på startsidan av ett WordPress-tema som hämtar inlägg av en viss Custom Post Type.</p>
<p>Först ska vi ladda hem Coda slider. Coda slider är ett jQuery-script som kan bläddra mellan olika &lt;div&gt;-taggar på ett snyggt sätt och som är väldigt lättanvänt.</p>
<p>Du laddar hem filerna och bakar in dom i din header.php-fil någonstans innanför &lt;head&gt; och &lt;/head&gt; på följande sätt:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;!-- Begin Stylesheets --&gt;
	&lt;link rel=&quot;stylesheet&quot; href=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>/coda-slider-2.0/stylesheets/coda-slider-2.0.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt; 
&lt;!-- End Stylesheets --&gt; 	 	
&lt;!-- Begin JavaScript --&gt; 
	&lt;script type=&quot;text/javascript&quot; src=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>/coda-slider-2.0/javascripts/jquery-1.3.2.min.js&quot;&gt;&lt;/script&gt; 
	&lt;script type=&quot;text/javascript&quot; src=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>/coda-slider-2.0/javascripts/jquery.easing.1.3.js&quot;&gt;&lt;/script&gt; 
	&lt;script type=&quot;text/javascript&quot; src=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>/coda-slider-2.0/javascripts/jquery.coda-slider-2.0.js&quot;&gt;&lt;/script&gt; 
		 &lt;script type=&quot;text/javascript&quot;&gt;
			$().ready(function() {
				$('#kampanj').codaSlider();
			});
		 &lt;/script&gt;
&lt;!-- End JavaScript --&gt;</pre></div></div>

<h2>Skapa ny post type</h2>
<p>Nu när vi har Coda slider-filerna på plats ska vi se till att vi får in en ny post type i admingränssnittet så att vår kund kan uppdatera den här kampanj-ytan på ett enkelt och smidigt sätt. Det vi gör nu är absolut enklast möjliga och är endast att lägga till en ny typ av poster. Vi öppnar vår funktions.php-fil och lägger till följande kod-snutt:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> post_type_kampanj<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	register_post_type<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'kampanj'</span><span style="color: #339933;">,</span>
                <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'label'</span> <span style="color: #339933;">=&gt;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Kampanj'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'public'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'show_ui'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	register_taxonomy_for_object_type<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'post_tag'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'kampanj'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'init'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'post_type_kampanj'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><a href="http://wplove.se/wordpress/wp-content/uploads/custom_post_type_screenshot.png" rel="lightbox[95]" title="custom_post_type_screenshot"><img class="alignnone size-large wp-image-98" title="custom_post_type_screenshot" src="http://wplove.se/wordpress/wp-content/uploads/custom_post_type_screenshot-615x410.png" alt="" width="615" height="410" /></a></p>
<h2>Dags att fylla på med inlägg</h2>
<p>Klart så? Japp! Nu när vi tittar i vårt admingränssnitt har det dykt upp en ny ruta för vår kampanj-yta. Nu kan vi börja fylla på inlägg som är kampanjer.</p>
<p>Sen i din index.php-fil ska vi nu baka in loppen. Vi använder en query för att starta loppen och bara hämta inlägg med &#8221;post type=kampanj&#8221;.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;div class=&quot;coda-slider-wrapper&quot;&gt;
	&lt;div class=&quot;coda-slider preload&quot; id=&quot;kampanj&quot;&gt;
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$wp_query</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> WP_Query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;post_type=kampanj&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #515100;">while</span> <span style="color: #009900;">&#40;</span>have_posts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> the_post<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;div class=&quot;panel&quot;&gt;
    	&lt;div class=&quot;panel-wrapper&quot;&gt;
			&lt;h2 class=&quot;title&quot;&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> the_title<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h2&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> the_content<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/div&gt;
	&lt;/div&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #515100;">endwhile</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
	&lt;/div&gt;&lt;!-- slut .coda-slider --&gt;
&lt;/div&gt;&lt;!-- slut .coda-slider-wrapper --&gt;</pre></div></div>

<h2>Se vad vi gjort</h2>
<p><a href="http://davidpaulsson.se/custom-post-types/">Här kan vi se vad vi gjort.</a></p>
<p>Sådär ja! Nu är allting så klart väldigt ostylat, men grundtanken hur man kan använda sig av Custom Post Types finns här. Självklart går det att bli väldigt mycket mer avancerad än det här, du kan t ex välja precis vilka kolumner och info som ska finnas för just dina custom post types. Kanske är det en mäklarsida där vi behöver flera olika typer av inlägg. En för bostadsrätter, en för villor och en för land. Sen behöver vi veta info som kvadratmeter, pris och adress? Ni förstår själva att nu börjar WordPress verkligen att på riktigt kriga mot dom stora CMS-systemen… Men det ska vi inte göra nu. Inte idag i alla fall.</p>
<p>Glöm inte att filtrera bort inläggen ur din vanliga loop sen, annars hamnar våra kampanjinlägg bland dina vanliga blogginlägg! Glöm inte heller att <a href="http://twitter.com/davidpaulsson">följa mig på twitter</a>, eller <a href="http://davidpaulsson.se">besöka min hemsida</a>. Tack för den här gången!</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/custom-post-types-i-wordpress-3-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rekryteringsdrive på #wpbar</title>
		<link>http://wplove.se/rekryteringsdrive-pa-wpbar/</link>
		<comments>http://wplove.se/rekryteringsdrive-pa-wpbar/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 13:10:29 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Allmänt]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=92</guid>
		<description><![CDATA[Ikväll är det dags för den allra första #wpbar och WPLove sponsrar! För att få lite fart på den här sajten behöver vi vara fler som skriver om WordPress så ikväll kommer jag att gå runt och försöka rekrytera så många som möjligt av de som är på plats för att skriva för WPLove. Vill [...]]]></description>
			<content:encoded><![CDATA[<p>Ikväll är det dags för den allra första #wpbar och WPLove sponsrar! För att få lite fart på den här sajten behöver vi vara fler som skriver om WordPress så ikväll kommer jag att gå runt och försöka rekrytera så många som möjligt av de som är på plats för att skriva för WPLove.</p>
<p>Vill du skriva om WordPress, främst ur ett utvecklarperspektiv? <a href="mailto:mans@wplove.se">Kontakta mig!</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/rekryteringsdrive-pa-wpbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kom på WPBar!</title>
		<link>http://wplove.se/kom-pa-wpbar/</link>
		<comments>http://wplove.se/kom-pa-wpbar/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 14:16:45 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Nyheter]]></category>
		<category><![CDATA[socialt]]></category>
		<category><![CDATA[tdh]]></category>
		<category><![CDATA[wpbar]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=89</guid>
		<description><![CDATA[Den 9 juni är det premiär för nya konceptet WPBar där alla vi som älskar WordPress får träffas, dricka en öl eller två och snacka WordPress precis hur mycket vi vill! WPLove är stolt sponsor av den första WPBaren som anordnas av den eminente WordPress-gurun TDH i Carnabys lokaler. Läs mer på wpbar.se.]]></description>
			<content:encoded><![CDATA[<p><a href="http://wplove.se/wordpress/wp-content/uploads/wpbar.png" rel="lightbox[89]" title="wpbar"><img class="alignnone size-full wp-image-90" title="wpbar" src="http://wplove.se/wordpress/wp-content/uploads/wpbar.png" alt="" width="308" height="162" /></a></p>
<p>Den 9 juni är det premiär för nya konceptet WPBar där alla vi som älskar WordPress får träffas, dricka en öl eller två och snacka WordPress precis hur mycket vi vill!</p>
<p>WPLove är stolt sponsor av den första WPBaren som anordnas av den eminente WordPress-gurun <a href="http://tdh.se">TDH</a> i Carnabys lokaler. Läs mer på <a href="http://wpbar.se">wpbar.se</a>.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/kom-pa-wpbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lista länkade filer: sök i the_content</title>
		<link>http://wplove.se/lista-lankade-filer-2/</link>
		<comments>http://wplove.se/lista-lankade-filer-2/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 09:24:09 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Temautveckling]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[list-child-attachments]]></category>
		<category><![CDATA[the_content]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=73</guid>
		<description><![CDATA[Tidigare skrev jag här på WPLove om att lista filer som är länkade till en sida eller post genom att använda det utmärkta pluginet List Child Attachments. Tyvärr upptäckte jag snart att pluginet inte alls gjorde det jag ville, nämligen att söka igenom the_content efter länkar till filer och lista dem separat. Pluginet använder istället [...]]]></description>
			<content:encoded><![CDATA[<p>Tidigare <a href="/lista-lankade-filer/">skrev jag här på WPLove</a> om att lista filer som är länkade till en sida eller post genom att använda det utmärkta pluginet <a href="http://code.google.com/p/list-child-attachments/">List Child Attachments</a>. Tyvärr upptäckte jag snart att pluginet inte alls gjorde det jag ville, nämligen att söka igenom the_content efter länkar till filer och lista dem separat. Pluginet använder istället funktionaliteten som finns inbyggd i WP där man kan &#8221;koppla&#8221; filer till en post genom mediebiblioteket.</p>
<p>Jag behövde något som var smartare, eftersom jag inte kan räkna med att alla som skriver på en sajt ska komma ihåg att manuellt länka in filerna från mediebiblioteket. Dessutom kan pluginet inte visa vilka filer som eventuellt länkats externt, om man nu skulle vilja det.</p>
<p>Okej, så det blev alltså dags att hacka ihop egen funktionalitet. Jag valde att lägga koden direkt i temats sidebar, men det skulle förstås gå att &#8221;pluginifiera&#8221; om man vill.</p>
<p>Först hade jag ett vanligt regexp för att leta igenom the_content men eftersom jag (högst beklagligen) inte är någon regexpfantom fick jag snabbt problem med funktionen. Jag hittade av en slump PHP-klassen &#8221;<a href="http://simplehtmldom.sourceforge.net/">simple_html_dom</a>&#8221; som gör det enkelt att från PHP behandla en HTML-bibba enligt Document Object Model, likt jQuery gör. Den här funktionen var perfekt för det jag ville göra. Efter att ha inkluderat koden kunde jag enkelt hitta alla länkar till fördefinierade filer i min HTML:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Funktion för right()</span>
<span style="color: #000000; font-weight: bold;">function</span> right<span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #339933;">,</span> <span style="color: #000088;">$count</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #515100;">return</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$count</span><span style="color: #339933;">*-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Definiera &quot;tillåtna&quot; länkars filändelser</span>
<span style="color: #000088;">$docsAr</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;.txt&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;.pdf&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;.doc&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;.xls&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;.tif&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;.ppt&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;mp3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Läs in HTML-koden till simple_html_dom</span>
<span style="color: #000088;">$html</span> <span style="color: #339933;">=</span> str_get_html<span style="color: #009900;">&#40;</span>get_the_content<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Hitta alla element &quot;a&quot; i koden och loopa igenom dem</span>
<span style="color: #515100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span> <span style="color: #339933;">-&gt;</span> <span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'a'</span><span style="color: #009900;">&#41;</span> <span style="color: #515100;">AS</span> <span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #515100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span>right<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">href</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$docsAr</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$filesAr</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$link</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">href</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Efter att ha kört denna funktion har jag nu en fin array med länkar till alla filer i the_content. Det kan vara en bra idé att massera resultatet lite genom att kolla om länken är lokal eller inte, om länken är absolut (http://url.till.sajten/uploads/fil.pdf) eller relativ (/uploads/fil.pdf) och se till att alla länkar följer samma format innan man gör en array_unique() på resultatet för att se till att samma fil inte listas två gånger ifall den är länkad två gånger.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/lista-lankade-filer-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sidmall eller shortcode? Extern funktionalitet i WP</title>
		<link>http://wplove.se/sidmall-eller-shortcode/</link>
		<comments>http://wplove.se/sidmall-eller-shortcode/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 07:58:43 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Mer än blogg]]></category>
		<category><![CDATA[functions.php]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[säkerhet]]></category>
		<category><![CDATA[shortcode]]></category>
		<category><![CDATA[Temautveckling]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=59</guid>
		<description><![CDATA[Ganska ofta behöver jag få in funktionalitet från en extern källa i en WordPress-sida. Det kan vara något så enkelt som innehållet i en textfil som ska läsas in, sorteras och visas som tabell, eller något mer avancerat som en helt egen webbapplikation som behöver komma in och bo någonstans i en WP-sajt. Hittills har [...]]]></description>
			<content:encoded><![CDATA[<p>Ganska ofta behöver jag få in funktionalitet från en extern källa i en WordPress-sida. Det kan vara något så enkelt som innehållet i en textfil som ska läsas in, sorteras och visas som tabell, eller något mer avancerat som en helt egen webbapplikation som behöver komma in och bo någonstans i en WP-sajt. Hittills har jag använt mig av specifika sidmallar med extra PHP-kod för att bygga in den här typen av funktioner, men jag börjar tveka. På en av mina installationer har jag nära tjugo olika sidmallar, och de allra flesta används bara en gång, på en specifik sida. Det känns inte så smart eller flexibelt.</p>
<p>Ett sätt att komma runt detta skulle vara att installera <a href="http://www.hongkiat.com/blog/execute-php-in-wordpress-post-page-and-widget-sidebar/">ett</a> <a href="http://bluesome.net/post/2005/08/18/50/">av</a> <a href="http://www.nosq.com/blog/2006/01/runphp-plugin-for-wordpress/">de</a> <a href="http://wordpress.org/extend/plugins/inline-php/">många</a> <a href="http://wordpress.org/extend/plugins/php-code-widget/">plugin</a> som låter mig köra PHP-kod i en post eller sida, men det känns som en riktigt läskig metod. Om någon mot förmodan skulle lyckas få tillgång till att ändra innehållet i mina sidor skulle det gå att köra valfritt PHP-kommando med ett sånt plugin, för att inte tala om möjligheten att pluginet i sig har säkerhetshål som gör det möjligt.</p>
<p>Det jag nu funderar på är att använda shortcodes och functions.php för att komma runt det hela istället. <a href="http://codex.wordpress.org/">WordPress Codex</a> berättar väldigt enkelt om <a href="http://codex.wordpress.org/Shortcode_API">shortcode API</a> och det är rekommenderad läsning för den som inte pysslat med shortcodes tidigare. Shortcodes används vanligen av plugins för att skapa genvägar till pluginfunktionalitet som kan användas inne i poster eller sidor, men det finns inget som hindrar att vi definierar en shortcode inne i ett temas functions.php istället.</p>
<h2>Exempel</h2>
<p>Codex eget exempel för att definiera en shortcode ser ut såhär:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// [bartag foo=&quot;foo-value&quot;]</span>
<span style="color: #000000; font-weight: bold;">function</span> bartag_func<span style="color: #009900;">&#40;</span><span style="color: #000088;">$atts</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">extract</span><span style="color: #009900;">&#40;</span>shortcode_atts<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'foo'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'no foo'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'bar'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'default bar'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$atts</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #515100;">return</span> <span style="color: #0000ff;">&quot;foo = <span style="color: #006699; font-weight: bold;">{$foo}</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
add_shortcode<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'bartag'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'bartag_func'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Exemplet ovan skulle skapa en shortcode med namn &#8221;bartag&#8221; som tar två argument, &#8221;foo&#8221; och &#8221;bar&#8221;. I det här exemplet görs ju ingenting med innehållet, men genom att modifiera koden något skulle vi kunna skapa en bra shortcode för att anropa egna PHP-funktioner och göra det så säkert som möjligt:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// [myfunction funcname=&quot;name&quot;]</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> myfunction_func<span style="color: #009900;">&#40;</span><span style="color: #000088;">$atts</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">extract</span><span style="color: #009900;">&#40;</span>shortcode_atts<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'funcname'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$atts</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #515100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$funcname</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'display_log'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		display_log<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #515100;">elseif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$funcname</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'statistics'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		run_statistics<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #515100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
add_shortcode<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'myfunction'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'myfunction_func'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Vi har nu skapat en shortcode som heter &#8221;myfunction&#8221; och som tar ett argument, &#8221;funcname&#8221;. Inne i shortcode-definitionen har vi världens enklaste if-sats för att se om man skickat in något av två fördefinierade funktionsnamn som kan användas för att köra PHP-funktioner. Det finns snyggare sätt att lösa det här på, men för att illustrera mitt exempel duger detta gott.</p>
<h2>Vad tycker du?</h2>
<p>Vad tycker du &#8211; är det här ett bra sätt att lösa det hela på, eller finns det bättre sätt? Finns det uppenbara brister i det här sättet att köra PHP-kod inifrån en sida/post? Kommentera gärna!</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/sidmall-eller-shortcode/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lista länkade filer: List child attachments</title>
		<link>http://wplove.se/lista-lankade-filer/</link>
		<comments>http://wplove.se/lista-lankade-filer/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 07:25:18 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[filer]]></category>
		<category><![CDATA[list-child-attachments]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[shortcode]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=46</guid>
		<description><![CDATA[Uppdatering: Det här pluginet gjorde inte exakt som jag ville. Läs om hur jag gjorde en alternativ lösning. I ett sajtprojekt jag för tillfället är inblandad i kräver webbdesignen att alla filer som länkas i en sida även ska listas separat i spalten. Det är en mycket bra idé, eftersom det då snabbt går att [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Uppdatering: Det här pluginet gjorde inte exakt som jag ville. <a href="/lista-lankade-filer-2/">Läs om hur jag gjorde en alternativ lösning</a>.</p></blockquote>
<p>I ett sajtprojekt jag för tillfället är inblandad i kräver webbdesignen att alla filer som länkas i en sida även ska listas separat i spalten. Det är en mycket bra idé, eftersom det då snabbt går att se t.ex. nedladdningsbara PDF:er för en sida eller en lista över alla länkade högupplösta bilder i ett pressrum, och så vidare.</p>
<p><a href="http://wplove.se/wordpress/wp-content/uploads/latest-child-attachments-2.png" rel="lightbox[46]" title="latest-child-attachments-2"><img class="alignnone size-full wp-image-54" title="latest-child-attachments-2" src="http://wplove.se/wordpress/wp-content/uploads/latest-child-attachments-2.png" alt="" width="169" height="155" /></a></p>
<p>Självklart vill man slippa att den som skapar sidan måste hålla koll på länkade filer och lista dem separat i extrafält eller liknande, så jag hade precis börjat fundera på hur jag skulle kunna parsa the_content för att hitta länkar till filer som ligger lokalt när jag kom på att någon redan borde ha löst det här åt mig. En snabb Googling senare har jag hittat &#8221;<a href="http://code.google.com/p/list-child-attachments/">List child attachments</a>&#8221; som av någon anledning inte ligger på WordPress.org utan endast på Google Code.</p>
<p>Nåväl, det här pluginet gör exakt det jag vill, och gör det dessutom bra, med ett antal konfigureringsalternativ. Jag kan välja i vilken ordning filerna ska listas, vilka typer av filer som ska listas och jag kan implementera det hela med en PHP-snutt i mitt tema eller bara lägga in det på vissa sidor med en shortcode. Dessutom genereras väldigt prydlig HTML med tydliga klasser för filtyp vilket gör det lätt att skapa väldigt snygg formattering med filikoner eller vad man nu vill.</p>
<p><a href="http://wplove.se/wordpress/wp-content/uploads/list-child-attachments-1.png" rel="lightbox[46]" title="list-child-attachments-1"><img class="alignnone size-full wp-image-48" title="list-child-attachments-1" src="http://wplove.se/wordpress/wp-content/uploads/list-child-attachments-1.png" alt="" width="621" height="324" /></a></p>
<h2><a href="http://wplove.se/wordpress/wp-content/uploads/list-child-attachments-1.png"></a>Användning</h2>
<p>Efter att pluginet är installerat är det en smal sak att lägga in koden i sitt tema, men jag tänkte här titta på shortcoden för att använda pluginet på vissa sidor.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>attachments <span style="color: #990000;">filetype</span><span style="color: #339933;">=</span>WORD<span style="color: #009900;">&#93;</span></pre></div></div>

<p>Den här shortcoden listar länkade filer, men endast om de är Wordfiler. På det här sättet kan du begränsa vilka filer som listas genom att ange filtyp (ALL, FILE, IMAGE, WORD, PDF, XLS, PPT).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>attachments order<span style="color: #339933;">=</span>DESC orderby<span style="color: #339933;">=</span>post_modified<span style="color: #009900;">&#93;</span></pre></div></div>

<p>Den här koden listar länkade filer sorterade efter ändringsdatum och i fallande skala, så de filer som laddats upp senast kommer att listas först.</p>
<h2>Läs mer och ladda ner</h2>
<ul>
<li><a href="http://code.google.com/p/list-child-attachments/">List child attachments på Google Code</a></li>
</ul>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/lista-lankade-filer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tumnaglar &#8211; dynamiska eller statiska, del ett</title>
		<link>http://wplove.se/tumnaglar-dynamiska-eller-statiska-del-ett/</link>
		<comments>http://wplove.se/tumnaglar-dynamiska-eller-statiska-del-ett/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 10:02:14 +0000</pubDate>
		<dc:creator>Måns Jonasson</dc:creator>
				<category><![CDATA[Temautveckling]]></category>
		<category><![CDATA[2.9]]></category>
		<category><![CDATA[add_image_size]]></category>
		<category><![CDATA[bilder]]></category>
		<category><![CDATA[get_the_post_thumbnail]]></category>
		<category><![CDATA[has_post_thumbnail]]></category>
		<category><![CDATA[post-thumbnails]]></category>
		<category><![CDATA[set_post_thumbnail_size]]></category>
		<category><![CDATA[tema]]></category>
		<category><![CDATA[the_post_thumbnail]]></category>
		<category><![CDATA[tumnaglar]]></category>

		<guid isPermaLink="false">http://wplove.se/?p=14</guid>
		<description><![CDATA[Bild- och filhanteringen i WordPress är ett av de områden som jag önskar mig många förbättringar inom. Det kommer visserligen nyheter hela tiden, som möjligheten till enklare bildredigering i WordPress 2.9, och mycket går att lösa med plugins, men ännu saknas ett antal grundläggande funktioner för att WordPress ska kunna bli ett fullfjädrat CMS direkt [...]]]></description>
			<content:encoded><![CDATA[<p>Bild- och filhanteringen i WordPress är ett av de områden som jag önskar mig många förbättringar inom. Det kommer visserligen nyheter hela tiden, som möjligheten till enklare bildredigering i WordPress 2.9, och mycket går att lösa med plugins, men ännu saknas ett antal grundläggande funktioner för att WordPress ska kunna bli ett fullfjädrat CMS direkt efter installation.</p>
<p>Från och med WordPress 2.9 finns åtminstone äntligen stöd för &#8221;post-thumbnails&#8221;, en funktion som är tänkt att användas för att visa &#8221;tumnaglar&#8221; till dina inlägg, som namnet antyder. Trots sitt namn är det smidigt att använda den här funktionen för att koppla även stora bilder till inlägg, och sedan automatiskt skapa tumnaglar av dem, i en eller flera storlekar. Det här är en teknik som jag använder på t.ex. <a href="http://www.internetdagarna.se">internetdagarna.se</a> där varje post har en bild kopplad till sig för att visas över inlägget, och samtidigt en omskalad version av bilden som visas vid listningar, arkivsidor, etc.</p>
<p>Det här tycker jag tyvärr är ett typiskt exempel på hur WordPress fungerar &#8211; man tar fram en funktion som är väldigt användbar som en mer traditionell CMS-liknande lösning, men väljer att döpa och informera om funktionen så att dess tänkta användning blir mycket smalare än vad som faktiskt går att göra med den. Men vi kan ju självklart bortse från det och titta på hur vi kan använda post-thumbnails för att skapa en helt dynamisk bildlösning oavsett användningsområde.</p>
<p>Innan version 2.9 fanns det inget smidigt sätt att knyta en bild till en post eller sida. Man kunde självklart lägga in en eller flera bilder i själva inlägget, men för att använda bilden separat var man tvungen att använda något av de plugin som tagits fram för att hämta första bilden ur ett inlägg eller liknande. Det finns också flera plugins som gör samma sak som post-thumbnails i 2.9, dvs låter användaren välja en bild från mediabiblioteket och knyta den till en post för att sedan använda den i temafilen på olika sätt.</p>
<h2>Att koppla bilder till inlägg och sidor</h2>
<p>Med post-thumbnails kan man nu göra det direkt i WP, utan plugins, men först måste man ange att temat har stöd för funktionen genom att ange följande i sin functions.php:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Lägg till support för post-thumbnails i detta tema</span>
add_theme_support<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'post-thumbnails'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Den lilla raden talar om för WordPress att det aktiva temat har stöd för post-thumbnails och ger automatiskt ett nytt val i redigeringsvyerna för inlägg och sidor:</p>
<p><a href="http://wplove.se/wordpress/wp-content/uploads/postthumb_ill2.png" rel="lightbox[14]" title="postthumb_ill2"><img class="alignnone size-full wp-image-22" title="postthumb_ill2" src="http://wplove.se/wordpress/wp-content/uploads/postthumb_ill2.png" alt="" width="291" height="275" /></a></p>
<p>I bilden ovan har jag redan valt en bild att använda som tumnagel för inlägget jag redigerar. När tumnageln är sparad kan vi i temat enkelt plocka ut den valda bilden till varje inlägg och visa den. Det här är praktiskt för att skapa en sajt där den som postar inlägg inte behöver veta hur man lägger in bilder i den visuella textredigeraren, särskilt om vi har speciella regler för hur de ska visas på sajten, men hur gör vi nu om vi vill visa bilden i en annan storlek än den som laddades upp? Vi kanske vill att de bilder vi valt ska visas på förstasidan som miniatyrer istället för full storlek.</p>
<p>Det går enkelt att skapa en hel uppsättning med fördefinierade tumnagelsstorlekar för WordPress att använda sig av, och vi gör det med fördel på samma ställe som vi initierade funktionen, i functions.php:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Definiera standardstorlek på bilder: 660 pixlars bredd och fri höjd</span>
set_post_thumbnail_size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">660</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">9999</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Definiera ett tumnagelsformat på 322 pixlars bredd och fri höjd</span>
add_image_size<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'index-thumb'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">322</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">9999</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Vad gjorde vi egentligen i exemplen ovan? Den första raden, &#8221;set_post_thumbnail_size&#8221;, skapar ett standardformat för bilder som hämtas via post-thumnails. I det här fallet har jag berättat för WordPress att mina bilder i standardstorlek ska vara 660 pixlar breda och max 9999 pixlar höga, vilket i princip ger mig fri höjd. WordPress kommer nu att skala om uppladdade bilder till det formatet, och jag kan använda bilderna i mitt tema och veta att de kommer att vara max 660 pixlar breda.</p>
<p>Den andra raden, &#8221;add_image_size&#8221; lägger till ytterligare ett bildformat, och här har jag valt att bilden ska vara max 322 pixlar bred och 9999 pixlar hög. Det första argumentet här, &#8221;index-thumb&#8221; ett namn jag själv anger, för att enkelt kunna anropa bilder i det här formatet senare.</p>
<p>Det går nu att ange hur många olika bildformat man vill, och att ge alla ett eget namn. WordPress kommer nu att automatiskt skapa omskalade tumnaglar i rätt format varje gång en bild laddas upp till mediabiblioteket.</p>
<p>När du väl kopplat en bild till ett inlägg kan du se i inläggslistningen vilken bild som är kopplat till vilket inlägg:</p>
<p><a href="http://wplove.se/wordpress/wp-content/uploads/postthumb_ill1.png" rel="lightbox[14]" title="postthumb_ill1"><img class="alignnone size-full wp-image-28" title="postthumb_ill1" src="http://wplove.se/wordpress/wp-content/uploads/postthumb_ill1.png" alt="" width="300" height="148" /></a></p>
<h2>Att använda bilderna</h2>
<p>Okej, vi har skapat ett eller flera tumnagelsformat och fått WordPress att visa val för tumnagel i anslutning till post- och sidredigeringsvyerna. Hur gör vi nu för att visa de bilder som kopplas till inläggen? Hela poängen med den här övningen är ju att visa bilderna i rätt storlek på sajten.</p>
<p>Det finns ett par enkla metoder att använda inne i &#8221;the loop&#8221; för att visa bilden i sitt tema. Först den allra enklaste:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Skriv ut komplett img-tagg med bilden i standardformatet</span>
the_post_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Kodsnutten ovan skriver helt enkelt ut den bild som angetts i standardformatet, det format som vi angav med &#8221;set_post_thumbnail_size&#8221; ovan.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Skriv ut komplett img-tagg med bilden i formatet &quot;index-thumb&quot;</span>
the_post_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;index-thumb&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Här lägger vi istället in bilden i formatet &#8221;index-thumb&#8221; som vi skapade med &#8221;add_image_size&#8221; ovan.</p>
<p>Ditt tema kanske behöver veta om ett inlägg har en bild kopplad eller inte? Här kommer &#8221;has_post_thumbnail&#8221; till användning:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Kolla om ett inlägg har en bild kopplad eller inte</span>
<span style="color: #515100;">if</span> <span style="color: #009900;">&#40;</span>has_post_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   the_post_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #515100;">else</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #515100;">echo</span> <span style="color: #0000ff;">&quot;Här fanns det ingen bild!&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Avancerat</h2>
<p>Det här är egentligen allt som behövs för att använda post-thumbnails, men det finns ett par saker till som kan vara bra att kunna. Först och främst, precis som med de flesta WP-funktioner finns en variant för att returnera värdet istället för att skriva ut det:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Hämta komplett sökväg till bild kopplad till inlägget</span>
<span style="color: #000088;">$thumbnail</span> <span style="color: #339933;">=</span> get_the_post_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Du kan också strunta i &#8221;the loop&#8221; och hämta bild kopplad till ett visst inlägg eller en viss sida bara du har dess ID:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Hämta komplett sökväg till bild kopplad till inlägg/sida med ID 424</span>
<span style="color: #000088;">$postID</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">424</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$thumbnail</span> <span style="color: #339933;">=</span> get_the_post_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #000088;">$postID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Även &#8221;has_post_thumbnail&#8221; kan ta ett ID som argument så du kan kolla status för en post utanför loopen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Kolla om post med ID 424 har en bild kopplad eller inte</span>
<span style="color: #000088;">$postID</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">424</span><span style="color: #339933;">;</span>
<span style="color: #515100;">if</span> <span style="color: #009900;">&#40;</span>has_post_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #000088;">$postID</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #515100;">echo</span> the_post_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #000088;">$postID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #515100;">else</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #515100;">echo</span> <span style="color: #0000ff;">&quot;Posten har ingen bild.&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Vad saknas?</h2>
<ul>
<li>Det känns märkligt att det bara går att koppla <em>en</em> bild till ett inlägg på det här sättet. Jag kanske vill ha två eller flera bilder kopplade? Det går inte att göra med dagens post-thumbnails.</li>
<li>WordPress klarar inte av att skala om bilder direkt, utan de format du vill använda måste finnas definierade med &#8221;add_image_size&#8221; <em>innan</em> du laddar upp bilden. Det här är en enorm brist den dagen du byter design på din sida och behöver ha alla tumnaglar ett annat format än du skapat dem! Tack och lov finns det plugin som löser det här, t.ex. det utmärkta <a href="http://wordpress.org/extend/plugins/regenerate-thumbnails/">regenerate thumbnails</a> men självklart borde WP lösa det här på egen hand, dynamiskt.</li>
</ul>
<h2>Nästa gång</h2>
<p>I del två av den här serien kommer jag att titta närmare på hur du kan skapa en helt dynamisk lösning för att skala om bilder i WordPress med hjälp av PHP och GD. Mer om det senare.</p>
<h2>Läs mer</h2>
<ul>
<li><a href="http://codex.wordpress.org/Template_Tags/the_post_thumbnail">the_post_thumbnail() i Codex</a></li>
<li><a href="http://codex.wordpress.org/Template_Tags/get_the_post_thumbnail">get_the_post_thumbnail() i Codex</a></li>
<li><a href="http://codex.wordpress.org/Template_Tags/has_post_thumbnail">has_post_thumbnail() i Codex</a></li>
<li><a href="http://www.wordpressguru.se/allt-du-behover-veta-om-wordpress-tumnaglar/">WordPressguru.se om post-thumbnails</a><a href="http://codex.wordpress.org/Template_Tags/get_the_post_thumbnail"> </a></li>
</ul>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://wplove.se/tumnaglar-dynamiska-eller-statiska-del-ett/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced) (user agent is rejected)

Served from: wplove.se @ 2012-02-23 06:19:35 -->
