.EU domeinnaam oplichterij

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 worden. Onze klant kon dit alleen voorkomen door zelf de .eu domeinnaam te registeren.

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?

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.

Voor meer informatie over internet domeinnamen en je rechten is het wellicht interessant om de blog “Internetrecht door Arnoud Engelfriet” te volgen. Arnoud heeft op zijn blog een aantal interessante artikelen / cases over domeinnamen en rechten staan.

Update 8 januari 2012: Arnoud Engelfriet heeft het artikel “Wanneer is een domeinnaam inbreuk op een handelsnaam?” gepubliceerd.

WooCommerce provincie veld verwijderen

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 iDEAL betaalmethode meer dan 250 stemmen kreeg. Hier hebben we bij Pronamic op ingespeeld door de Pronamic iDEAL plugin uit te rusten met de iDEAL betaalmethode voor WooCommerce.

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 “provincie” veld in veel gevallen niet interessant. Met behulp van onderstaande code is deze eenvoudig te verbergen.

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');

Vervolgens kan met behulp van CSS het veld verborgen worden:

.form-row.hidden {
	visibility: hidden;
}

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.

iDEAL blijft populairste betaalmethode

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:

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.

Inmiddels hebben we er voor gezorgd dat men eenvoudig via Gravity Forms, een populaire formulieren plugin voor WprdPress, eenvoudig iDEAL betalingen kan aanbieden. Daarnaast hebben we vorige week voor de nieuwe webwinkel plugin WooCommerce een koppeling met iDEAL gelanceerd.

Als je hulp nodig hebt met het toevoegen van iDEAL aan je WordPress website dan kun je hiervoor altijd contact opnemen met Pronamic. Ook voor op maat gemaakte koppelingen met iDEAL ben je bij Pronamic op het juiste adres!

WordPress network update probleem

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 is not writable.

De doel map voor het streamen van bestanden bestaat niet of is niet schrijfbaar.

Deze foutmelding werd binnen het bestand class-http.php gecreëerd doordat de te downloaden bestanden niet konden worden opgeslagen.

Dit probleem heb ik uiteindelijk tijdelijk kunnen oplossen door de wp-content map tijdelijk schrijfrechten te geven (chmod 777) zoals ook in een WordPress forum topic werd vermeld.

Hoe werkt het WordPress update systeem?

WordPress is uitgerust met een zeer eenvoudig en krachtig update systeem. Dankzij dit systeem kunnen WordPress gebruikers eenvoudig WordPress, plugins en thema’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.

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’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: http://api.wordpress.org/

Als je de WordPress broncode doorzoekt op deze URL zul je een tiental bestanden vinden waarin hier gebruik van gemaakt wordt. In het bestand wp-includes\update.php is te zien op welke wijze WordPress controleert of er nieuwe versies zijn van WordPress, plugins of thema’s. Ik zal hieronder met enkele code fragmenten laten zien hoe gecontroleerd wordt of er thema update beschikbaar is.

WordPress zal in eerste instantie informatie over de geïnstalleerde WordPress thema’s opvragen met behulp van de get_themes() functie. Vervolgens zal deze informatie met behulp van HTTP POST verzoek worden verstuurd naar de WordPress.org API. Hiervoor wordt gebruik gemaakt van de wp_remote_post() functie die onderdeel is van de WordPress HTTP API. De WordPress.org API zal vervolgens aangeven of er updates beschikbaar zijn voor de geïnstalleerde thema’s.

In onderstaande code fragment is globaal te zien hoe een dergelijk verzoek wordt opgebouwd en uitgevoerd:

$themes = array(
	'twentyten' => array(
		'Name' => 'Twenty Ten' ,
		'Version' => '1.0'
	) ,
	'platform' => array(
		'Name' => 'Platform' ,
		'Version' => '1.0'
	) ,
	'delicate' => array(
		'Name' => 'Delicate' ,
		'Version' => '1.0'
	)
);

$args = array(
	'body' => array('themes' => 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']);

Als alles goed gaat dan zal de variabele $result informatie over thema’s bevatten waar updates voor beschikbaar zijn. Hieronder zie je een voorbeeld dump van de $result variabele:

array(3) {
	["twentyten"]=>
	array(3) {
		["new_version"]=>
		string(3) "1.1"
		["url"]=>
		string(44) "http://wordpress.org/extend/themes/twentyten"
		["package"]=>
		string(61) "http://wordpress.org/extend/themes/download/twentyten.1.1.zip"
	}
	["platform"]=>
	array(3) {
		["new_version"]=>
		string(5) "1.3.1"
		["url"]=>
		string(43) "http://wordpress.org/extend/themes/platform"
		["package"]=>
		string(62) "http://wordpress.org/extend/themes/download/platform.1.3.1.zip"
	}
	["delicate"]=>
	array(3) {
		["new_version"]=>
		string(5) "3.4.3"
		["url"]=>
		string(43) "http://wordpress.org/extend/themes/delicate"
		["package"]=>
		string(62) "http://wordpress.org/extend/themes/download/delicate.3.4.3.zip"
	}
}

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 Transient API het updaten van de thema’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  Theme_Upgrader PHP klasse.

OpenOffice Calc cellen samenvoegen met nieuwe lijnen

Voor het importeren van een aantal berichten naar WordPress moest ik een aantal cellen in een Excel document samenvoegen naar 1 cel. De waarden van deze cellen moest onder elkaar komen te staan binnen 1 cel. Om dit te realiseren heb ik gebruik gemaakt van OpenOffice Calc, de gratis opensource variant van Microsoft Excel.

Na een zoektocht op Google naar “openoffice calc concatenate new line” was de oplossing snel gevonden. Veel van deze oplossingen zijn echter beschreven in het Engels, waardoor ze niet direct werken in een Nederlandse OpenOffice installatie. De functienamen moeten namelijk ook vertaald worden naar het Nederlands. Het soms nog een hele uitdaging om de juiste Nederlandse functie naam te vinden.

Op het OpenOffice.org forum was de volgende functie te vinden:

=CONCATENATE(C37;CHAR(13);CHAR(10);C38)

Deze is als volgt te gebruiken in een Nederlandse OpenOffice installatie:

=TEKST.SAMENVOEGEN(A1;TEKEN(13);TEKEN(10);B1;TEKEN(13);TEKEN(10);C1)

TEKEN(13) staat in dit geval voor een Carriage Return (CR), ook wel beter bekend als “\r”. De TEKEN(10) staat voor een Line Feed (LF), ook wel beter bekend als “\n”. De combinatie “\r\n” (CRLF) wordt op Windows omgevingen gebruikt om aan te geven dat er op een nieuwe regel gestart moet worden.

WordPress zoeken sorteren op relevantie en datum

De standaard zoekfunctie van WordPress is erg eenvoudig en beperkt. De zoekresultaten zijn standaard gesorteerd op datum. Het is niet mogelijk om deze te sorteren op bijvoorbeeld relevantie. Daarnaast is het ook niet mogelijk om fancy operators te gebruiken in je zoekopdracht zoals we gewend zijn bij andere zoekmachines. Gelukkig zijn er allerlei plugins die de zoekfunctie van WordPress uitbreid.

Ik wilde op een WordPress website de bezoekers de mogelijkheid geven om te sorteren op relevantie of op datum. Om dit mogelijk te maken heb ik ik de Relevanssi plugin van Mikko Saari (twitter: @msaari) geïnstalleerd en de volgende code toegevoegd aan de search.php template.

<?php 

$url = add_query_arg('s', get_search_query(), home_url('/'));

printf(
	__('ordered by %s | %s', 'text_domain') ,
	sprintf('<a href="%s">%s</a>',
		add_query_arg('orderby', 'relevance', $url) ,
		__('relevance', 'text_domain')
	) ,
	sprintf('<a href="%s">%s</a>',
		add_query_arg('orderby', 'post_date', $url) ,
		__('date', 'text_domain')
	)
);

?>

WordPress berichten inclusief bijlagen verwijderen

In mijn vorige blog kon je lezen hoe je WordPress berichten kunt verwijderen die geen gekoppelde media (attachments) hebben. In dit bericht laat ik een code snippet zien waarmee je berichten inclusief gekoppelde bijlagen kunt verwijderen. Als je een bericht binnen de WordPress beheerpaneel verwijderd blijven de gekoppelde bijlagen staan. Als je ook de gekoppelde bestanden wilt verwijderen kun je gebruik maken van de volgende code:

$query = new \WP_Query();
$query->query(array(
	'post_type' => 'project' ,
	'tax_query' => array(
		array(
			'taxonomy' => 'phase' ,
			'field' => 'slug' ,
			'terms' => 'test'
		)
	) ,
	'posts_per_page' => -1
));

while($query->have_posts()) {
	$query->the_post();

	$postId = get_the_ID();

	echo $postId, ' - ', get_the_title(), '<br />';

	$attachmentsQuery = new \WP_Query();
	$attachmentsQuery->query(array(
		'post_type' => 'attachment' ,
		'post_status' => 'inherit' ,
		'post_parent' => $postId
	));

	while($attachmentsQuery->have_posts()) {
		$attachmentsQuery->the_post();

		$attachmentId = get_the_ID();

		echo '- ', $attachmentId, ' - ', get_the_title(), '<br />'; 

		$result = wp_delete_attachment($attachmentId, true);
	}

	$result = wp_delete_post($postId, true);
}

Je kunt uiteraard de WP_Query->query() parameters helemaal naar wens aanpassen.

Verwijder WordPress berichten zonder bijlagen

Bij Pronamic zetten we regelmatig websites om naar WordPress. We maken hierbij gebruik van verschillende importeer technieken. Helaas gaat er bij het importeren ook wel eens iets fout. Zo gebeurd het soms dat de bijlagen bij een bericht niet goed worden overgenomen. We moeten dan alle berichten zonder gekoppelde bijlagen verwijderen. Binnen het beheerpaneel van WordPress is dit niet eenvoudig te realiseren. Daarom hebben we een simpel scriptje ontwikkeld waarmee we deze berichten kunnen verwijderen.

$query = new WP_Query();
$query->query(array(
	'post_type' => 'post' ,
	'posts_per_page' => -1
));

while($query->have_posts()) {
	$query->the_post();

	$id = get_the_ID();

	$attachmentsQuery = new \WP_Query();
	$attachmentsQuery->query(array(
		'post_type' => 'attachment' ,
		'post_status' => 'inherit' ,
		'post_parent' => $id ,
		'posts_per_page' => -1
	));

	if($attachmentsQuery->post_count == 0) {
		wp_delete_post($id, true);
	}
}