<?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>Remco Tolsma</title>
	<atom:link href="http://remcotolsma.nl/feed/" rel="self" type="application/rss+xml" />
	<link>http://remcotolsma.nl</link>
	<description></description>
	<lastBuildDate>Fri, 17 Feb 2012 11:08:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>WordPress menu met geluid</title>
		<link>http://remcotolsma.nl/2012/02/wordpress-menu-met-geluid/</link>
		<comments>http://remcotolsma.nl/2012/02/wordpress-menu-met-geluid/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 19:25:02 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=354</guid>
		<description><![CDATA[Onlangs kreeg ik de vraag hoe je een geluidsfragment kunt afspelen zodra je over een WordPress menu item heen gaat met je muis. Op internet is veel informatie te vinden over hoe je een geluidsfragment kunt afspelen, maar hoe integreer &#8230; <a href="http://remcotolsma.nl/2012/02/wordpress-menu-met-geluid/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Onlangs kreeg ik de vraag hoe je een geluidsfragment kunt afspelen zodra je over een WordPress menu item heen gaat met je muis. Op internet is veel informatie te vinden over hoe je een geluidsfragment kunt afspelen, maar hoe integreer je deze netjes in een WordPress thema? In dit bericht beschrijf ik kort een mogelijk oplossing.</p>
<p>Allereerst is het handig om een map &#8216;audio&#8217; aan te maken binnen je WordPress thema map. Binnen deze map kun je alle gerelateerde audio bestanden plaatsen die je wilt afspelen zodra men met de muis over een menu item gaat. Vervolgens voegen we aan het WordPress functions.php bestand een aantal functies toe:</p>
<pre class="brush:php">/**
 * Menu audio
 *
 * @return array
 */
function prefix_menu_audio() {
	$dir = get_stylesheet_directory_uri();

	return array(
		'beep' =&gt; array($dir . '/audio/beep.mp3', $dir . '/audio/beep.ogg') ,
		'end' =&gt; array($dir . '/audio/end.mp3', $dir . '/audio/end.ogg')
	);
}</pre>
<p>In bovenstaand code fragment worden 2 audio fragmenten gedefinieerd in 2 verschillende formaten, namelijk MP3 en OGG. Om deze audio fragmenten te kunnen afspelen moeten ze worden toegevoegd aan de HTML van de website. Dit kunnen we realiseren met behulp van de volgende functie:</p>
<pre class="brush:php">/**
 * Menu beep HTML
 */
function prefix_menu_audio_html() {
	$html = '';

	$audio = prefix_menu_audio();

	foreach($audio as $id =&gt; $sources) {
		$html .= sprintf('&lt;audio id="%s"&gt;', esc_attr($id));
		foreach($sources as $source) {
			$html .= sprintf('&lt;source src="%s" /&gt;', esc_attr($source));
		}
		$html .= '&lt;/audio&gt;';
	}

	echo $html;
}

add_action('wp_footer', 'prefix_menu_audio_html');</pre>
<p>Met behulp van bovenstaande functie wordt er voor gezorgd dat de gedefinieerde audio fragmenten in een nette HTML5 formaat in de footer van de WordPress website worden geplaatst. Vervolgens kunnen we met behulp van een aantal regels code JavaScript / jQuery deze audio fragmenten afspelen. Om dit te realiseren maken we maken een JavaScript bestand menu-audio.js aan in de WordPress thema map.</p>
<pre class="brush:js">jQuery(document).ready(function($) {
	$(".menu a").mouseenter(function() {
		$("#beep").trigger("play");
	});
});</pre>
<p>Dit bestand kan met behulp van de volgende functie worden toegevoegd aan de WordPress website zodat deze wordt uitgevoerd:</p>
<pre class="brush:php">/**
 * Menu beeps enqueue scripts
 */
function prefix_enqueue_scripts_menu_audio() {
	wp_enqueue_script(
		'menu-audio' ,
		get_stylesheet_directory_uri() . '/menu-audio.js' ,
		array('jquery')
	);
}

add_action('wp_enqueue_scripts', 'prefix_enqueue_scripts_menu_audio');</pre>
<p>In dit voorbeeld wordt slecht 1 audio fragment afgespeeld voor alle menu items. Met een beetje WordPress en jQuery kennis is dit natuurlijk eenvoudig uit te breiden.</p>
<p><strong>Update:</strong> Voor het gemak heb ik een <a href="http://remcotolsma.nl/wp-content/uploads/menu-audio.zip">kant en klare WordPress menu audio oplossing</a> klaar gezet, welke uitgepakt kan worden in je thema map en geactiveerd kan worden door <code>include 'menu-audio/menu-audio.php';</code> in je thema&#8217;s functions.php bestand te plaatsen.</p>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2012/02/wordpress-menu-met-geluid/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordPress Google Conversion shortcode</title>
		<link>http://remcotolsma.nl/2012/02/wordpress-google-conversion-shortcode/</link>
		<comments>http://remcotolsma.nl/2012/02/wordpress-google-conversion-shortcode/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 18:39:11 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WooCommerce]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=351</guid>
		<description><![CDATA[Om Google Conversion doelen bij te houden moet je soms op bepaalde pagina&#8217;s een zogenaamde Google Conversion code plaatsen. Binnen WordPress installatie kan het toevoegen van dergelijke codes soms lastig zijn. Daarom heb ik een eenvoudig WordPress shortcode gemaakt waarmee &#8230; <a href="http://remcotolsma.nl/2012/02/wordpress-google-conversion-shortcode/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Om Google Conversion doelen bij te houden moet je soms op bepaalde pagina&#8217;s een zogenaamde Google Conversion code plaatsen. Binnen WordPress installatie kan het toevoegen van dergelijke codes soms lastig zijn. Daarom heb ik een eenvoudig WordPress shortcode gemaakt waarmee je eenvoudig een Google Conversion code kunt toevoegen aan je WordPress pagina&#8217;s.</p>
<pre class="brush:php">/**
 * Google Conversion Code
 */
function prefix_shortcode_google_conversion_code($atts) {
	extract(shortcode_atts(array(
		'id' =&gt; null ,
		'language' =&gt; 'en' ,
		'format' =&gt; 3 ,
		'color' =&gt; '666666' ,
		'label' =&gt; '' ,
		'value' =&gt; 0 ,
	), $atts));

	$crlf = "\r\n";

	$noScriptImageUrl = sprintf('http://www.googleadservices.com/pagead/conversion/%d/', $id);
	$noScriptImageUrl = add_query_arg(array(
		'label' =&gt; $label ,
		'guid' =&gt; 'ON' ,
		'script' =&gt; 0
	), $noScriptImageUrl);

	$output = '';

	$output .= '&lt;!-- Google Code for Bezoekers Pagina Douchegoten Remarketing List --&gt;' . $crlf;
	$output .= '&lt;script type="text/javascript"&gt;' . $crlf;
	$output .= '/* &lt;![CDATA[ */' . $crlf;
	$output .= sprintf('var google_conversion_id = %d;', $id) . $crlf;
	$output .= sprintf('var google_conversion_language = "%s";', $language) . $crlf;
	$output .= sprintf('var google_conversion_format = "%s";', $format) . $crlf;
	$output .= sprintf('var google_conversion_color = "%s";', $color) . $crlf;
	$output .= sprintf('var google_conversion_label = "%s";', $label) . $crlf;
	$output .= sprintf('var google_conversion_value = %d;', $value) . $crlf;
	$output .= '/* ]]&gt; */' . $crlf;
	$output .= '&lt;/script&gt;' . $crlf;

	$output .= '&lt;script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion.js"&gt;' . $crlf;
	$output .= '&lt;/script&gt;' . $crlf;

	$output .= '&lt;noscript&gt;' . $crlf;
	$output .= '&lt;div style="display:inline;"&gt;' . $crlf;
	$output .= sprintf('&lt;img height="1" width="1" style="border-style:none;" alt="" src="%s"/&gt;', esc_attr($noScriptImageUrl)) . $crlf;
	$output .= '&lt;/div&gt;' . $crlf;
	$output .= '&lt;/noscript&gt;' . $crlf;

	return $output;
}

add_shortcode('google_conversion_code', 'prefix_shortcode_google_conversion_code');</pre>
<p>Deze shortcode is met name interessant zijn in combinatie met WordPress webwinkel plugins zoals WooCommerce of Jigoshop. Om de shortcode ook op de product categorieën te kunnen gebruiken zullen de shortcodes ook toegepast moeten worden op de product categorieën beschrijvingen.</p>
<pre class="brush:php">/**
 * Add shortcode support to term description
 */
function prefix_term_description($description) {
	if(is_archive()) {
		$description = do_shortcode($description);
	}

	return $description;
}

add_filter('term_description', 'prefix_term_description');</pre>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2012/02/wordpress-google-conversion-shortcode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iDEAL voor Shopp 1.2</title>
		<link>http://remcotolsma.nl/2012/01/ideal-voor-shopp-1-2/</link>
		<comments>http://remcotolsma.nl/2012/01/ideal-voor-shopp-1-2/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 21:28:08 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[iDEAL]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=341</guid>
		<description><![CDATA[Op woensdag 6 juli 2011 werd door de ontwikkelaars van de Shopp plugin versie 1.2 aangekondigd. Er werd een indrukwekkende lijst aan verbeterpunten en nieuwe functionaliteiten genoemd. Ik had gehoopt dat na deze aankondiging binnen een aantal weken Shopp 1.2 &#8230; <a href="http://remcotolsma.nl/2012/01/ideal-voor-shopp-1-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Op woensdag 6 juli 2011 werd door de ontwikkelaars van de <a href="https://shopplugin.net/blog/shopp-1-2-is-coming/">Shopp plugin versie 1.2 aangekondigd</a>. Er werd een indrukwekkende lijst aan verbeterpunten en nieuwe functionaliteiten genoemd. Ik had gehoopt dat na deze aankondiging binnen een aantal weken Shopp 1.2 gelanceerd zou worden. Helaas heeft dit iets meer tijd gekost, maar lijkt Shopp 1.2 er nu toch aan te komen.</p>
<p>Het team achter Shopp heeft blijkbaar toch erg veel moeite moeten doen om de nieuwe versie zo in te richten dat gebruikers probleemloos kunnen overstappen van Shopp 1.1 naar versie 1.2. Met de grote lijst aan nieuwe verbeteringen en nieuwe functionaliteit kan ik me goed voorstellen dat dit een erg lastig klus is (of was). Eind december 2011 werd gelukkig de eerste <a href="https://shopplugin.net/support/topic/shopp-12-release-candidate-available-now">release candidate van Shopp 1.2</a> beschikbaar gesteld.</p>
<p>Dit betekende voor <a href="http://pronamic.nl/">Pronamic</a> werk aan de winkel om de <a href="http://pronamic.nl/ideal-voor-shopp/">Pronamic iDEAL</a> plugin te testen in combinatie met Shopp 1.2. De nieuwe Shopp plugin is uitgerust met een compleet nieuw systeem voor het afhandelen van bestellingen en betalingen. Hierdoor moesten er ook een aantal aanpassingen worden gedaan aan de Pronamic iDEAL plugin.</p>
<p>Door de code van een plugin te bekijken is vaak wel te zien hoe bepaalde functionaliteiten werken. In het geval van Shopp 1.2 was het echter lastig te overzien hoe en wanneer functies werden aangeroepen. Daarom heb ik een stroomdiagram gemaakt waarin te zien is welke functies en actie worden aangeroepen na het plaatsen van een bestelling.</p>
<p><a href="http://remcotolsma.nl/wp-content/uploads/shopp-12-functions-hooks.png"><img class="alignright size-large wp-image-342" title="Shopp 1.2 functions and hooks" src="http://remcotolsma.nl/wp-content/uploads/shopp-12-functions-hooks-1024x989.png" alt="" width="584" height="564" /></a></p>
<p><a href="http://remcotolsma.nl/wp-content/uploads/shopp-12-functions-hooks.odg">Download ODF tekening</a></p>
<p>Aan de hand van dit diagram hebben we de Pronamic iDEAL plugin bijgewerkt en werkt deze sinds vandaag ook in combinatie met Shopp 1.2. Alle Shopp gebruikers die werken met de Pronamic iDEAL plugin kunnen straks zonder problemen updaten naar versie 1.2.</p>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2012/01/ideal-voor-shopp-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScanSnap S300 gebruiken op Mac</title>
		<link>http://remcotolsma.nl/2012/01/scansnap-s300-gebruiken-op-mac/</link>
		<comments>http://remcotolsma.nl/2012/01/scansnap-s300-gebruiken-op-mac/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 19:04:01 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[Geen categorie]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=329</guid>
		<description><![CDATA[De ScanSnap S300 is in principe bedoeld voor gebruik op een normale PC met Windows. Fujitsu heeft namelijk voor de Mac een speciale versie van de scanner uitgebracht, de ScanSnap S300M. Ik ben echter vrij recent overgestapt van een PC &#8230; <a href="http://remcotolsma.nl/2012/01/scansnap-s300-gebruiken-op-mac/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://remcotolsma.nl/wp-content/uploads/fujitsu-scansnap-s300.gif"><img class="alignright  wp-image-333" title="Fujitsu - ScanSnap S300" src="http://remcotolsma.nl/wp-content/uploads/fujitsu-scansnap-s300.gif" alt="" width="240" height="120" /></a>De ScanSnap S300 is in principe bedoeld voor gebruik op een normale PC met Windows. Fujitsu heeft namelijk voor de Mac een speciale versie van de scanner uitgebracht, de ScanSnap S300M. Ik ben echter vrij recent overgestapt van een PC naar een Mac. Gelukkig heeft <a href="http://riotsquad.tv/about-us/">Nathaniel Akin</a> hier een oplossing voor gevonden die hij beschrijft in <a href="http://techenvy.com/hack/mac-osx-drivers-for-windows-scansnap">het artikel &#8220;Mac OSX drivers for Windows Scansnap&#8221; op Tech Envy website</a>.</p>
<p>De oplossing is relatief eenvoudig, allereerst installeer je de laatste software voor de S300M (Download: <a href="http://www.fujitsu.com/downloads/COMP/fcpa/scanners/drivers/ScanSnap_V22L12_S510M_S500M_S300M.dmg">ScanSnap_V22L12_S510M_S500M_S300M.dmg</a>). Vervolgens download je de software voor de S1500M software (Download: <a href="http://www.fujitsu.com/downloads/COMP/fcpa/scanners/drivers/ScanSnap_V30L20W_S1500M.dmg">ScanSnap_V30L20W_S1500M.dmg</a>) waarin je een kleine aanpassing maakt. In het bestand <code>ScanSnap_V30L20.pkg/Contents/Resources/InstallationCheck</code> wordt namelijk een eenvoudig controle gedaan welke versie / type ScanSnap je hebt. Als je deze check volledig uitschakelt met behulp van <code>exit(0);</code> op regel 2 te zetten kun je zonder problemen de software voor de S1500M installeren.</p>
<p>De OCR software waarmee je PDF doorzoekbaar kunt maken lijkt dan helaas niet meer te functioneren, maar dit kun je eenvoudig oplossen door de update voor FineReader te installeren en deze applicatie voor het scannen te gebruiken (Download: <a href="http://www.fujitsu.com/downloads/COMP/fcpa/scanners/drivers/fr4ss.dmg">FR4SS.dmg</a>). Dat Fujitsu voor de normale PC en voor de Mac verschillende versies heeft gemaakt is een beetje onhandig. Gelukkig maakt de eenvoud en de snelheid van de super kleine scanner erg veel goed.</p>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2012/01/scansnap-s300-gebruiken-op-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.EU domeinnaam oplichterij</title>
		<link>http://remcotolsma.nl/2011/12/eu-domeinnaam-oplichterij/</link>
		<comments>http://remcotolsma.nl/2011/12/eu-domeinnaam-oplichterij/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 14:57:29 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[Geen categorie]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=325</guid>
		<description><![CDATA[Het is alweer een aantal maanden geleden dat een klant van Pronamic door Domeinnaam Register werd gebeld. Dit bedrijf had onze klant verteld dat de .eu variant van hun .nl domeinnaam door een ander bedrijf met dezelfde naam geregisterd zou &#8230; <a href="http://remcotolsma.nl/2011/12/eu-domeinnaam-oplichterij/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Het is alweer een aantal maanden geleden dat een klant van Pronamic door <a href="http://www.domeinnaamregister.com/" rel="nofollow" target="_blank">Domeinnaam Register</a> werd gebeld. Dit bedrijf had onze klant verteld dat de .eu variant van hun .nl domeinnaam door een ander bedrijf met dezelfde naam geregisterd zou worden. Onze klant kon dit alleen voorkomen door zelf de .eu domeinnaam te registeren.</p>
<p>Onze klant was gelukkig verstandig genoeg om eerst even met ons te overleggen. Een verstandig zet, want veel bedrijven worden op deze manier op onnodige kosten gejaagd. Ik was toch wel benieuwd naar het verhaal van Domeinnaam Register dus heb telefonisch contact met ze opgenomen. Na een korte uitleg wisten ze over welke kwestie het ging. Ze legden uit dat een bedrijf bij hun de betreffende .eu domeinnaam wilde registreren. Dat is op zich geen probleem, maar waarom vallen ze onze klant daarmee lastig? Iedereen is toch vrij om elke vrije .eu domeinnaam te registreren?</p>
<p>De betreffende persoon bleef echter volhouden dat ze wettelijk verplicht waren om dit op deze manier af te handelen. Ik weet niet alle ins en outs van dergelijke zaken, dus heb maar aangegeven dat ik het een twijfelachtig verhaal vond. Onze klant vervolgens geadviseerd om de .eu domeinnaam niet te registeren en het bedrijf vriendelijk te bedanken. Inmiddels zijn we een aantal maanden verder en leek het me interessant om te kijken of de betreffende .eu domeinnaam geregistreerd was door het andere bedrijf met dezelfde naam. Zoals te verwachten viel is de betreffende domeinnaam nog steeds gewoon beschikbaar.</p>
<p>Voor meer informatie over internet domeinnamen en je rechten is het wellicht interessant om de blog &#8220;<a href="http://blog.iusmentis.com/">Internetrecht door Arnoud Engelfriet</a>&#8221; te volgen. Arnoud heeft op zijn blog een aantal interessante <a href="http://blog.iusmentis.com/tag/domeinnamen">artikelen / cases over domeinnamen en rechten</a> staan.</p>
<p><strong>Update 8 januari 2012:</strong> Arnoud Engelfriet heeft het artikel &#8220;<a href="http://blog.iusmentis.com/2012/01/09/wanneer-is-een-domeinnaam-inbreuk-op-een-handelsnaam/">Wanneer is een domeinnaam inbreuk op een handelsnaam?</a>&#8221; gepubliceerd.</p>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2011/12/eu-domeinnaam-oplichterij/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WooCommerce provincie veld verwijderen</title>
		<link>http://remcotolsma.nl/2011/11/woocommerce-provincie-veld-verwijderen/</link>
		<comments>http://remcotolsma.nl/2011/11/woocommerce-provincie-veld-verwijderen/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 08:35:21 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[WooCommerce]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=314</guid>
		<description><![CDATA[WooCommere is een nieuwe, maar nu al erg populaire, webwinkel plugin voor WordPress. De plugin is inmiddels al rond de 18.000+ keer gedownload. Ook in Nederland lijkt WooCommerce terrein te winnen. Dit bleek al op het ideeën platform van WooThemes, &#8230; <a href="http://remcotolsma.nl/2011/11/woocommerce-provincie-veld-verwijderen/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://remcotolsma.nl/wp-content/uploads/woocommerce-logo.jpg"><img class="alignright size-medium wp-image-315" title="WooCommerce logo" src="http://remcotolsma.nl/wp-content/uploads/woocommerce-logo-300x76.jpg" alt="" width="300" height="76" /></a>WooCommere is een nieuwe, maar nu al erg populaire, webwinkel plugin voor WordPress. De plugin is inmiddels al rond de 18.000+ keer gedownload. Ook in Nederland lijkt WooCommerce terrein te winnen. Dit bleek al op het ideeën platform van WooThemes, waar de <a href="http://woo.uservoice.com/forums/133476-woocommerce/suggestions/2231067-ideal-payments-dutch-" rel="nofollow">iDEAL betaalmethode meer dan 250 stemmen</a> kreeg. Hier hebben we bij Pronamic op ingespeeld door de Pronamic iDEAL plugin uit te rusten met <a href="http://pronamic.nl/ideal-voor-woocommerce/">de iDEAL betaalmethode voor WooCommerce</a>.</p>
<p>Inmiddels zijn we een aantal weken verder en zijn we bij Pronamic druk bezig met de implementatie van een aantal WooCommerce webwinkels. Doordat het een vrij nieuwe plugin is is altijd even uitzoeken wat er mee mogelijk is en wat de beperkingen zijn. Het verwijderen, toevoegen en/of aanpassen van velden in het afrekenen formulier blijkt in ieder geval heel eenvoudig te gaan. Voor Nederlandse webwinkeliers is het &#8220;provincie&#8221; veld in veel gevallen niet interessant. Met behulp van onderstaande code is deze eenvoudig te verbergen.</p>
<pre class="brush:php">function prefix_woocommerce_billing_fields($fields) {
	if(isset($fields['billing_state'])) {
		$fields['billing_state']['class'][] = 'hidden';
		$fields['billing_state']['required'] = false;
	}

	return $fields;
}

add_filter('woocommerce_billing_fields', 'prefix_woocommerce_billing_fields');</pre>
<p>Vervolgens kan met behulp van CSS het veld verborgen worden:</p>
<pre class="brush:css">.form-row.hidden {
	visibility: hidden;
}</pre>
<p>Met behulp van deze code wordt het veld overigens niet volledig verwijderd, maar enkel onzichtbaar gemaakt. Je kunt uiteraard het veld ook volledig verwijderen, maar dan zul je waarschijnlijk ook de andere velden moeten aanpassen om de opmaak van het formulier netjes te houden.</p>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2011/11/woocommerce-provincie-veld-verwijderen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iDEAL blijft populairste betaalmethode</title>
		<link>http://remcotolsma.nl/2011/11/ideal-blijft-populairste-betaalmethode/</link>
		<comments>http://remcotolsma.nl/2011/11/ideal-blijft-populairste-betaalmethode/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 16:04:24 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[iDEAL]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=310</guid>
		<description><![CDATA[Volgens de Thuiswinkel Markt Monitor is en blijft iDEAL in 2011 de populairste betaalmethode. Het blijkt dat 52,08% van de gebruikers iDEAL als laatste heeft gebruikt om online af te rekenen. In onderstaande grafiek is een overzicht te zien van &#8230; <a href="http://remcotolsma.nl/2011/11/ideal-blijft-populairste-betaalmethode/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Volgens de Thuiswinkel Markt Monitor is en blijft iDEAL in 2011 de populairste betaalmethode. Het blijkt dat 52,08% van de gebruikers iDEAL als laatste heeft gebruikt om online af te rekenen. In onderstaande grafiek is een overzicht te zien van welke betaalmethode het vaakst is gebruikt bij de laatste aankopen:</p>
<p><img src="https://chart.googleapis.com/chart?cht=p3&amp;chd=t:52.08,15.63,8.33,7.29,5.21,4.17,4.17,3.13&amp;chco=CC0066&amp;chs=580x150&amp;chl=52.08%|15.63%|8.33%|7.29%|5.21%|4.17%|4.17%|3.13&amp;chdl=iDEAL%20%2852,08%%29|Acceptgiro%20via%20internetbankieren%20%2815,63%%29|Creditcard%20via%20internet%20%288,33%%29|Overschrijving%20via%20internetbankieren%20%287,29%%29|PayPal%20%285,21%%29|Acceptgiro%20via%20papieren%20formulier%20zelf%20%284,17%%29|Eenmalige%20/%20doorlopende%20machtiging%20%284,17%%29|Anders%20%283,13%%29" alt="" /></p>
<p>Aangezien iDEAL erg populair ben ik bij Pronamic ook regelmatig bezig met het opzetten van iDEAL koppeling. Zo hebben we vrij recent de iDEAL plugin voor WordPress gelanceerd. Met behulp van deze plugin breiden we andere WordPress plugins uit met de iDEAL betaalmethode.</p>
<p>Inmiddels hebben we er voor gezorgd dat men eenvoudig via <a href="http://pronamic.nl/ideal-voor-gravity-forms/">Gravity Forms, een populaire formulieren plugin voor WprdPress, eenvoudig iDEAL betalingen kan aanbieden</a>. Daarnaast hebben we vorige week voor <a href="http://pronamic.nl/ideal-voor-woocommerce/">de nieuwe webwinkel plugin WooCommerce een koppeling met iDEAL gelanceerd</a>.</p>
<p>Als je hulp nodig hebt met het toevoegen van iDEAL aan je WordPress website dan kun je hiervoor altijd <a href="http://pronamic.nl/contact/">contact opnemen met Pronamic</a>. Ook voor op maat gemaakte koppelingen met iDEAL ben je bij <a href="http://pronamic.nl/">Pronamic</a> op het juiste adres!</p>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2011/11/ideal-blijft-populairste-betaalmethode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress network update probleem</title>
		<link>http://remcotolsma.nl/2011/08/wordpress-network-update-probleem/</link>
		<comments>http://remcotolsma.nl/2011/08/wordpress-network-update-probleem/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 08:05:37 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=302</guid>
		<description><![CDATA[Bij het updaten van een WordPress network (multisite) installatie liep ik tegen problemen aan bij het geautomatiseerd updaten van WordPress. Bij het uitvoeren van een update kreeg ik de volgende foutmelding: Destination directory for file streaming does not exist or &#8230; <a href="http://remcotolsma.nl/2011/08/wordpress-network-update-probleem/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bij het updaten van een WordPress network (multisite) installatie liep ik tegen problemen aan bij het geautomatiseerd updaten van WordPress. Bij het uitvoeren van een update kreeg ik de volgende foutmelding:</p>
<blockquote><p>Destination directory for file streaming does not exist or is not writable.</p></blockquote>
<blockquote><p>De doel map voor het streamen van bestanden bestaat niet of is niet schrijfbaar.</p></blockquote>
<p>Deze foutmelding werd binnen het bestand <a href="http://core.trac.wordpress.org/browser/tags/3.2/wp-includes/class-http.php#L142">class-http.php</a> gecreëerd doordat de te downloaden bestanden niet konden worden opgeslagen.</p>
<p>Dit probleem heb ik uiteindelijk tijdelijk kunnen oplossen door de wp-content map tijdelijk schrijfrechten te geven (chmod 777) zoals ook in een <a href="http://wordpress.org/support/topic/download-failed-could-not-create-temporary-file?replies=29">WordPress forum topic</a> werd vermeld.</p>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2011/08/wordpress-network-update-probleem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beveiligd: Windfinder API</title>
		<link>http://remcotolsma.nl/2011/06/windfinder-api/</link>
		<comments>http://remcotolsma.nl/2011/06/windfinder-api/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 19:09:59 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=297</guid>
		<description><![CDATA[Er is geen samenvatting omdat dit bericht is beveiligd.]]></description>
			<content:encoded><![CDATA[<form action="http://remcotolsma.nl/wp-pass.php" method="post">
<p>Dit bericht is beveiligd met een wachtwoord. Geef je wachtwoord om het te lezen:</p>
<p><label for="pwbox-297">Wachtwoord:<br />
<input name="post_password" id="pwbox-297" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="Vastleggen" /></p></form>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2011/06/windfinder-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hoe werkt het WordPress update systeem?</title>
		<link>http://remcotolsma.nl/2011/06/hoe-werkt-het-wordpress-update-systeem/</link>
		<comments>http://remcotolsma.nl/2011/06/hoe-werkt-het-wordpress-update-systeem/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 11:43:25 +0000</pubDate>
		<dc:creator>remcotolsma</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://remcotolsma.nl/?p=290</guid>
		<description><![CDATA[WordPress is uitgerust met een zeer eenvoudig en krachtig update systeem. Dankzij dit systeem kunnen WordPress gebruikers eenvoudig WordPress, plugins en thema&#8217;s eenvoudig updaten. Ik als ontwikkelaar was erg benieuwd naar deze opzet van dit systeem. Ik ben daarom de &#8230; <a href="http://remcotolsma.nl/2011/06/hoe-werkt-het-wordpress-update-systeem/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>WordPress is uitgerust met een zeer eenvoudig en krachtig update systeem. Dankzij dit systeem kunnen WordPress gebruikers eenvoudig WordPress, plugins en thema&#8217;s eenvoudig updaten. Ik als ontwikkelaar was erg benieuwd naar deze opzet van dit systeem. Ik ben daarom de WordPress code ingedoken om de werking van dit systeem te onderzoeken.</p>
<p>Het WordPress update systeem maakt gebruik van een API die op WordPress.org staat. Dankzij deze API is eenvoudig informatie op te vragen over WordPress, plugins en thema&#8217;s. Elke WordPress installatie informeert om de 12 uren of er updates beschikbaar zijn via de WordPress.org API. De WordPress.org API kun je benaderen via de volgende URL: <a href="http://api.wordpress.org/">http://api.wordpress.org/</a></p>
<p>Als je de WordPress broncode doorzoekt op deze URL zul je een tiental bestanden vinden waarin hier gebruik van gemaakt wordt. In het bestand <a href="http://core.trac.wordpress.org/browser/trunk/wp-includes/update.php">wp-includes\update.php</a> is te zien op welke wijze WordPress controleert of er nieuwe versies zijn van WordPress, plugins of thema&#8217;s. Ik zal hieronder met enkele code fragmenten laten zien hoe gecontroleerd wordt of er thema update beschikbaar is.</p>
<p>WordPress zal in eerste instantie informatie over de geïnstalleerde WordPress thema&#8217;s opvragen met behulp van de <a href="http://codex.wordpress.org/Function_Reference/get_themes">get_themes() functie</a>. Vervolgens zal deze informatie met behulp van HTTP POST verzoek worden verstuurd naar de <a href="http://api.wordpress.org/">WordPress.org API</a>. Hiervoor wordt gebruik gemaakt van de wp_remote_post() functie die onderdeel is van de <a href="http://codex.wordpress.org/HTTP_API">WordPress HTTP API</a>. De WordPress.org API zal vervolgens aangeven of er updates beschikbaar zijn voor de geïnstalleerde thema&#8217;s.</p>
<p>In onderstaande code fragment is globaal te zien hoe een dergelijk verzoek wordt opgebouwd en uitgevoerd:</p>
<pre class="brush:php">$themes = array(
	'twentyten' =&gt; array(
		'Name' =&gt; 'Twenty Ten' ,
		'Version' =&gt; '1.0'
	) ,
	'platform' =&gt; array(
		'Name' =&gt; 'Platform' ,
		'Version' =&gt; '1.0'
	) ,
	'delicate' =&gt; array(
		'Name' =&gt; 'Delicate' ,
		'Version' =&gt; '1.0'
	)
);

$args = array(
	'body' =&gt; array('themes' =&gt; serialize($themes))
);

$response = wp_remote_post('http://api.wordpress.org/themes/update-check/1.0/', $args);

if(is_wp_error($response)) {
	exit('Sorry, something went wrong.');
}

if(200 != $response['response']['code']) {
	exit('Sorry, something went wrong.');
}

$result = unserialize($response['body']);</pre>
<p>Als alles goed gaat dan zal de variabele $result informatie over thema&#8217;s bevatten waar updates voor beschikbaar zijn. Hieronder zie je een voorbeeld dump van de $result variabele:</p>
<pre class="brush:php">array(3) {
	["twentyten"]=&gt;
	array(3) {
		["new_version"]=&gt;
		string(3) "1.1"
		["url"]=&gt;
		string(44) "http://wordpress.org/extend/themes/twentyten"
		["package"]=&gt;
		string(61) "http://wordpress.org/extend/themes/download/twentyten.1.1.zip"
	}
	["platform"]=&gt;
	array(3) {
		["new_version"]=&gt;
		string(5) "1.3.1"
		["url"]=&gt;
		string(43) "http://wordpress.org/extend/themes/platform"
		["package"]=&gt;
		string(62) "http://wordpress.org/extend/themes/download/platform.1.3.1.zip"
	}
	["delicate"]=&gt;
	array(3) {
		["new_version"]=&gt;
		string(5) "3.4.3"
		["url"]=&gt;
		string(43) "http://wordpress.org/extend/themes/delicate"
		["package"]=&gt;
		string(62) "http://wordpress.org/extend/themes/download/delicate.3.4.3.zip"
	}
}</pre>
<p>De WordPress.org API geeft dus aan welke versie nu beschikbaar is en waar deze te vinden is. WordPress zal vervolgens met behulp van de <a href="http://codex.wordpress.org/Transients_API">Transient API</a> het updaten van de thema&#8217;s kenbaar maken aan de WordPress beheerders. De beheerder krijgen daardoor een melding te zien dat er updates beschikbaar zijn. Zodra de beheerder de update uitvoert zal de package URL gedownload worden en de thema bestanden vervangen worden. Hiervoor gebruikt WordPress onder andere de  <a href="http://phpdoc.wordpress.org/trunk/WordPress/Upgrader/Theme_Upgrader.html">Theme_Upgrader</a> PHP klasse.</p>
]]></content:encoded>
			<wfw:commentRss>http://remcotolsma.nl/2011/06/hoe-werkt-het-wordpress-update-systeem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

