Maandelijks archief: juni 2012

WooCommerce wijzigt CSS selectors

Om de vormgeving van de producten op WooCommerce product archief pagina’s aan te passen maakte WooCommerce in versie 1.5.5 (of lager) altijd gebruik van de volgende CSS selector:

ul.products li {

}

Dit is ook terug te vinden in het WooCommerce less bestand waarin de standaard opmaak staat gedefinieerd:

http://plugins.trac.wordpress.org/browser/woocommerce/tags/1.5.5/assets/css/woocommerce.less#L392

We gebruikten vaak een sterkere CSS selector om de opmaak van producten op archief pagina’s aan te passen:

body ul.products li {

}

Vanaf WooCommerce 1.5.6 wordt er echter standaard een nieuwe CSS selector gebruikt. Deze selector is sterker als de door ons toegevoegde CSS selector, waardoor eventuele aanpassingen na een update niet altijd meer zichtbaar zijn.

ul.products li.product {

}

http://plugins.trac.wordpress.org/browser/woocommerce/tags/1.5.6/assets/css/woocommerce.less#L393

Dit probleem is uiteraard eenvoudig op te lossen door de eigen gedefinieerde selector ook weer specifieker te maken:

body ul.products li.product {

}

Het is echter wel de vraag in hoeverre het verstandig is om kleine aanpassingen aan het standaard meegeleverde WooCommerce thema op deze manier te realiseren. In hoeverre zijn de WooCommerce ontwikkelaars zich bewust van de gevolgen van dergelijke wijzigingen? En in hoeverre moeten de WooCommerce ontwikkelaars rekening houden met dergelijke zaken?

Gravity Forms conditionele omleiding

Gravity Forms is een erg krachtige formulieren plugin voor WordPress. Onlangs hebben we deze plugin gebruikt voor het opzetten van een keuzerondjes vragen test. De bezoeker moest echter afhankelijk van aantal gekozen A, B en C antwoorden doorgestuurd worden naar een specifieke pagina. Standaard kan dit niet binnen Gravity Forms geconfigureerd worden, maar met behulp van een eenvoudig filter functie kan dit wel gerealiseerd worden:

function prefix_test_confirmation($confirmation, $form, $lead, $ajax) {
	if($form['id'] == '1') {
		foreach($form['fields'] as $field) {
			$values[] = $lead[$field['id']];
		}

		$result = array_count_values($values);
		arsort($result);
		$result = key($result);

		switch($result) {
			case 'A':
				$confirmation = array('redirect' => 'http://domeinnaam.nl/test/a-antwoorden/');
				break;
			case 'B':
				$confirmation = array('redirect' => 'http://domeinnaam.nl/test/b-antwoorden/');
				break;
			case 'C':
				$confirmation = array('redirect' => 'http://domeinnaam.nl/test/c-antwoorden/');
				break;
		}
	}

	return $confirmation;
}

add_filter('gform_confirmation', 'prefix_test_confirmation', 10, 4);

Bovenstaande functie telt hoeveel dezelfde antwoorden er zijn gegevens. Dit resulteert in een data array waarbij per antwoord staat hoe vaak deze is gegeven. Vervolgens wordt met behulp van de volgende regels code het meest gegeven antwoord bepaalt:

$result = array_count_values($values);
arsort($result);
$result = key($result);

FatBat geeft deze oplossing op de PHP documentatie website:

Needed to get the index of the max/highest value in an assoc array.
max() only returned the value, no index, so I did this instead.

reset($x);   // optional. 
arsort($x); 
$key_of_max = key($x);   // returns the index.

Mocht je ook een test / enquete willen opzetten in WordPress dan kan Gravity Forms een zeer handige oplossing zijn. Mocht je hier meer informatie over willen dan kun je altijd vrijblijvende contact opnemen met Pronamic.

WordPress Broken Link Checker en comment_author_url

Op een grote WordPress website waarbij we veel reacties geautomatiseerd hebben geïmporteerd gaf de Broken Link Checker plugin bij veel reacties aan dat er verbroken links aanwezig waren. Al snel bleek dat deze reacties zonder URL schema (http://, ftp://, etc.) in het systeem stonden. Hierdoor kon de Broken Link Checker plugin de URL’s niet correct transformeren naar volledige URL’s.

Een ‘comment_author_url’ die als ‘www.website.nl’ in de database stonden transformeerde de Broken Link Checker plugin naar ‘http://wordpress-website.nl/2012/06/nieuwsbericht/comment-page-1/www.website.nl’. In vrijwel alle gevallen resulteert dit in een link die resulteert in een 404. Gelukkig hebben we dit probleem eenvoudig kunnen verhelpen door de ‘comment_author_url’ in de database te corrigeren.

Met behulp van de volgende database query kunnen eenvoudig de URL’s die zonder ‘http://’ beginnen opgevraagd worden:

SELECT
	*
FROM
	wp_comments
WHERE
	comment_author_url != ''
		AND
	comment_author_url NOT LIKE 'http://%'

Vervolgens kunnen deze onvolledige URL’s eenvoudig aangevuld worden met ‘http://’ met behulp van de volgende query:

UPDATE
	wp_comments
SET 
	comment_author_url = CONCAT('http://', comment_author_url)
WHERE
	comment_author_url != ''
		AND
	comment_author_url NOT LIKE 'http://%'

Mocht je ook hulp nodig hebben met het omzetten van een maatwerk website naar een krachtige WordPress website dan kun je altijd eens contact opnemen met Pronamic. We hebben veel ervaring met het geautomatiseerd importeren van berichten, pagina en reacties naar een WordPress website.

WooCommerce betaalmethode toevoegen aan e-mail

Onlangs kreeg ik van een opdrachtgever de vraag of de door de klant gekozen betaalmethode ook weergegeven zou kunnen worden in de WooCommerce e-mail. Dit zodat de administratie eenvoudiger de betaling kan controleren en de bestelling kan afronden.

Na het doorbladeren van de WooCommerce e-mail sjablonen kwam ik al snel een aantal acties tegen waarop we kunnen inhaken. In de WooComemrce ‘admin-new-order.php‘ e-mail sjabloon kan de ‘woocommerce_email_after_order_table’ actie gebruikt worden om de e-mail uit te breiden met aanvullende informatie.

function prefix_woocommerce_email_display_payment_method( $order, $is_admin_email ) {
	if ( $is_admin_email ) {
		echo '<p>';
		echo '	<strong>' , __('Payment Method:', 'text-domain') , '</strong> ';
		echo '	' , $order->payment_method_title;
		echo '</p>';
	}
}

add_action( 'woocommerce_email_after_order_table', 'prefix_woocommerce_email_display_payment_method', 10, 2 );

Mocht je hulp nodig hebben bij het opzetten van WordPress webwinkel dan kun je altijd eens contact opnemen met Pronamic.